// bslh_wyhashincrementalalgorithm.t.cpp                              -*-C++-*-
#include <bslh_wyhashincrementalalgorithm.h>

#include <bslmf_assert.h>
#include <bslmf_isbitwisemoveable.h>
#include <bslmf_issame.h>

#include <bsls_assert.h>
#include <bsls_asserttest.h>
#include <bsls_bsltestutil.h>
#include <bsls_byteorderutil.h>
#include <bsls_platform.h>
#include <bsls_stopwatch.h>
#include <bsls_systemtime.h>
#include <bsls_timeinterval.h>
#include <bsls_types.h>

#include <algorithm>

#include <limits.h>
#include <stddef.h>  // for `size_t`
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <wchar.h>

#if defined(_MSC_VER) && defined(_M_X64)
# include <intrin.h>
# pragma intrinsic(_umul128)
#endif

using namespace BloombergLP;

//=============================================================================
//                                  TEST PLAN
//-----------------------------------------------------------------------------
//                                  Overview
//                                  --------
// The component under test is a `bslh` hashing algorithm.  The basic test plan
// is to compare the output of the function call operator with the expected
// output generated by a known-good implementation of the hashing algorithm.
// The component will also be tested for conformance to the requirements on
// `bslh` hashing algorithms, outlined in the `bslh` package level
// documentation.
//-----------------------------------------------------------------------------
// TYPEDEF
// [ 4] typedef bsls::Types::Uint64 result_type;
//
// CONSTANTS
// [ 5] enum { k_SEED_LENGTH = 16 };
//
// CREATORS
// [ 2] Obj();
// [ 2] Obj(const char *seed);
// [ 2] ~Obj();
//
// MANIPULATORS
// [ 3] void operator()(void const* key, size_t len);
// [ 3] result_type computeHash();
// ----------------------------------------------------------------------------
// [ 1] BREATHING TEST
// [ 6] Trait IsBitwiseMoveable
// [ 7] MATCH TEST
// [ 8] ALIGNMENT INDEPENDENCE
// [ 9] PLATFORM INDEPENDENCE
// [10] USAGE EXAMPLE
// [-1] DISPERSION TEST
//-----------------------------------------------------------------------------

// ============================================================================
//                     STANDARD BSL ASSERT TEST FUNCTION
// ----------------------------------------------------------------------------

namespace {

int testStatus = 0;

void aSsErT(bool condition, const char *message, int line)
{
    if (condition) {
        printf("Error " __FILE__ "(%d): %s    (failed)\n", line, message);
        fflush(stdout);

        if (0 <= testStatus && testStatus <= 100) {
            ++testStatus;
        }
    }
}

}  // close unnamed namespace

// ============================================================================
//               STANDARD BSL TEST DRIVER MACRO ABBREVIATIONS
// ----------------------------------------------------------------------------

#define ASSERT       BSLS_BSLTESTUTIL_ASSERT
#define ASSERTV      BSLS_BSLTESTUTIL_ASSERTV

#define LOOP_ASSERT  BSLS_BSLTESTUTIL_LOOP_ASSERT
#define LOOP0_ASSERT BSLS_BSLTESTUTIL_LOOP0_ASSERT
#define LOOP1_ASSERT BSLS_BSLTESTUTIL_LOOP1_ASSERT
#define LOOP2_ASSERT BSLS_BSLTESTUTIL_LOOP2_ASSERT
#define LOOP3_ASSERT BSLS_BSLTESTUTIL_LOOP3_ASSERT
#define LOOP4_ASSERT BSLS_BSLTESTUTIL_LOOP4_ASSERT
#define LOOP5_ASSERT BSLS_BSLTESTUTIL_LOOP5_ASSERT
#define LOOP6_ASSERT BSLS_BSLTESTUTIL_LOOP6_ASSERT

#define Q            BSLS_BSLTESTUTIL_Q   // Quote identifier literally.
#define P            BSLS_BSLTESTUTIL_P   // Print identifier and value.
#define P_           BSLS_BSLTESTUTIL_P_  // P(X) without '\n'.
#define T_           BSLS_BSLTESTUTIL_T_  // Print a tab (w/o newline).
#define L_           BSLS_BSLTESTUTIL_L_  // current Line number

// ============================================================================
//                  NEGATIVE-TEST MACRO ABBREVIATIONS
// ----------------------------------------------------------------------------

#define ASSERT_SAFE_PASS(EXPR) BSLS_ASSERTTEST_ASSERT_SAFE_PASS(EXPR)
#define ASSERT_SAFE_FAIL(EXPR) BSLS_ASSERTTEST_ASSERT_SAFE_FAIL(EXPR)
#define ASSERT_PASS(EXPR)      BSLS_ASSERTTEST_ASSERT_PASS(EXPR)
#define ASSERT_FAIL(EXPR)      BSLS_ASSERTTEST_ASSERT_FAIL(EXPR)
#define ASSERT_OPT_PASS(EXPR)  BSLS_ASSERTTEST_ASSERT_OPT_PASS(EXPR)
#define ASSERT_OPT_FAIL(EXPR)  BSLS_ASSERTTEST_ASSERT_OPT_FAIL(EXPR)

// ============================================================================
//                  PRINTF FORMAT MACRO ABBREVIATIONS
// ----------------------------------------------------------------------------

#define ZU BSLS_BSLTESTUTIL_FORMAT_ZU

//=============================================================================
//                             USAGE EXAMPLE
//-----------------------------------------------------------------------------

///Usage
///-----
// This section illustrates intended usage of this component.
//
///Example: Creating and Using a Hash Table
/// - - - - - - - - - - - - - - - - - - - -
// Suppose we have any array of types that define `operator==`, and we want a
// fast way to find out if values are contained in the array.  We can create a
// `HashTable` data structure that is capable of looking up values in O(1)
// time.
//
// Further suppose that we will be storing futures (the financial instruments)
// in this table.  Since futures have standardized names, we don't have to
// worry about any malicious values causing collisions.  We will want to use a
// general purpose hashing algorithm with a good hash distribution and good
// speed.  This algorithm will need to be in the form of a hash functor -- an
// object that will take objects stored in our array as input, and yield a
// 64-bit int value.  The functor can pass the attributes of the `TYPE` that
// are salient to hashing into the hashing algorithm, and then return the hash
// that is produced.
//
// We can use the result of the hash function to index into our array of
// `buckets`.  Each `bucket` is simply a pointer to a value in our original
// array of `TYPE` objects.
//
// First, we define our `HashTable` template class, with the two type
// parameters: `TYPE` (the type being referenced) and `HASHER` (a functor that
// produces the hash).
// ```
    template <class TYPE, class HASHER>
    class HashTable {
// ```
// This `class template` implements a hash table providing fast lookup of an
// external, non-owned, array of values of (template parameter) `TYPE`.
//
// The (template parameter) `TYPE` shall have a transitive, symmetric
// `operator==` function.  There is no requirement that it have any kind of
// creator defined.
//
// The `HASHER` template parameter type must be a functor with a method having
// the following signature:
// ```
//  size_t operator()(TYPE)  const;
//                   -OR-
//  size_t operator()(const TYPE&) const;
// ```
// and `HASHER` shall have a publicly accessible default constructor and
// destructor.
//
// Note that this hash table has numerous simplifications because we know the
// size of the array and never have to resize the table.
// ```
        // DATA
        const TYPE       *d_values;          // Array of values table is to
                                             // hold
        size_t            d_numValues;       // Length of `d_values`.
        const TYPE      **d_bucketArray;     // Contains ptrs into `d_values`
        size_t            d_bucketArrayMask; // Will always be `2^N - 1`.
        HASHER            d_hasher;          // User supplied hashing algorithm

      private:
        // PRIVATE ACCESSORS

        /// Look up the specified `value`, having the specified `hashValue`,
        /// and load its index in `d_bucketArray` into the specified `idx`.
        /// If not found, return the vacant entry in `d_bucketArray` where
        /// it should be inserted.  Return `true` if `value` is found and
        /// `false` otherwise.
        bool lookup(size_t      *idx,
                    const TYPE&  value,
                    size_t       hashValue) const;

      public:
        // CREATORS

        /// Create a hash table referring to the specified `valuesArray`
        /// having length of the specified `numValues`.  No value in
        /// `valuesArray` shall have the same value as any of the other
        /// values in `valuesArray`
        HashTable(const TYPE *valuesArray,
                  size_t      numValues);

        /// Free up memory used by this hash table.
        ~HashTable();

        // ACCESSORS

        /// Return true if the specified `value` is found in the table and
        /// false otherwise.
        bool contains(const TYPE& value) const;
    };

    // PRIVATE ACCESSORS
    template <class TYPE, class HASHER>
    bool HashTable<TYPE, HASHER>::lookup(size_t      *idx,
                                         const TYPE&  value,
                                         size_t       hashValue) const
    {
        const TYPE *ptr;
        for (*idx = hashValue & d_bucketArrayMask; (ptr = d_bucketArray[*idx]);
                                       *idx = (*idx + 1) & d_bucketArrayMask) {
            if (value == *ptr) {
                return true;                                          // RETURN
            }
        }

        // value was not found in table

        return false;
    }

    // CREATORS
    template <class TYPE, class HASHER>
    HashTable<TYPE, HASHER>::HashTable(const TYPE *valuesArray,
                                       size_t      numValues)
    : d_values(valuesArray)
    , d_numValues(numValues)
    , d_hasher()
    {
        size_t bucketArrayLength = 4;
        while (bucketArrayLength < numValues * 4) {
            bucketArrayLength *= 2;

        }
        d_bucketArrayMask = bucketArrayLength - 1;
        d_bucketArray = new const TYPE *[bucketArrayLength];
        memset(d_bucketArray,  0, bucketArrayLength * sizeof(TYPE *));

        for (unsigned i = 0; i < numValues; ++i) {
            const TYPE& value = d_values[i];
            size_t idx;
            const bool found = lookup(&idx, value, d_hasher(value));
            BSLS_ASSERT_OPT(!found);    (void) found;
            d_bucketArray[idx] = &d_values[i];
        }
    }

    template <class TYPE, class HASHER>
    HashTable<TYPE, HASHER>::~HashTable()
    {
        delete [] d_bucketArray;
    }

    // ACCESSORS
    template <class TYPE, class HASHER>
    bool HashTable<TYPE, HASHER>::contains(const TYPE& value) const
    {
        size_t idx;
        return lookup(&idx, value, d_hasher(value));
    }
// ```
// Then, we define a `Future` class, which holds a c-string `name`, char
// `callMonth`, and short `callYear`.
// ```
    class Future {
// ```
// This `class` identifies a future contract.  It tracks the name, call month
// and year of the contract it represents, and allows equality comparison.
// ```
        // DATA
        const char *d_name;    // held, not owned
        const char  d_callMonth;
        const short d_callYear;

      public:
        // CREATORS

        /// Create a `Future` object out of the specified `name`,
        /// `callMonth`, and `callYear`.
        Future(const char *name, const char callMonth, const short callYear)
        : d_name(name), d_callMonth(callMonth), d_callYear(callYear)
        {}

        /// Create a `Future` with default values.
        Future() : d_name(""), d_callMonth('\0'), d_callYear(0)
        {}

        // ACCESSORS

        /// Return the month that this future expires.
        const char * getMonth() const
        {
            return &d_callMonth;
        }

        /// Return the name of this future
        const char * getName() const
        {
            return d_name;
        }

        /// Return the year that this future expires
        const short * getYear() const
        {
            return &d_callYear;
        }

        /// Compare this to the specified `other` object and return true if
        /// they are equal
        bool operator==(const Future& rhs) const
        {
            return (!strcmp(d_name, rhs.d_name)) &&
                                              d_callMonth == rhs.d_callMonth &&
                                              d_callYear  == rhs.d_callYear;
        }
    };

    /// Compare compare the specified `lhs` and `rhs` objects and return
    /// true if they are not equal
    bool operator!=(const Future& lhs, const Future& rhs)
    {
        return !(lhs == rhs);
    }
// ```
// Next, we need a hash functor for `Future`.  We are going to use the
// `WyHashIncrementalAlgorithm` because it is a fast, general purpose hashing
// algorithm that will provide an easy way to combine the attributes of
// `Future` objects that are salient to hashing into one reasonable hash that
// will distribute the items evenly throughout the hash table.
// ```

    /// This struct is a functor that will apply the
    /// `WyHashIncrementalAlgorithm` to objects of type `Future`.
    struct HashFuture {

        bsls::Types::Uint64 d_seed;

        HashFuture()
        {
            // Generate random bits in `d_seed` based on the time of day in
            // nanoseconds.

            bsls::Types::Uint64 nano =
                      bsls::SystemTime::nowMonotonicClock().totalNanoseconds();
            const int iterations = static_cast<int>(nano & 7) + 1;
            for (int ii = 0; ii < iterations; ++ii) {
                nano *= bsls::SystemTime::nowMonotonicClock().
                                                            totalNanoseconds();
                nano += nano >> 32;
            }

            BSLMF_ASSERT(sizeof(d_seed) <= sizeof(nano));

            memcpy(&d_seed, &nano, sizeof(d_seed));
        }

        // MANIPULATOR

        /// Return the hash of the of the specified `future`.  Note that
        /// this uses the `WyHashIncrementalAlgorithm` to quickly combine
        /// the attributes of `Future` objects that are salient to hashing
        /// into a hash suitable for a hash table.
        size_t operator()(const Future& future) const
        {
            bslh::WyHashIncrementalAlgorithm hash(d_seed);

            hash(future.getName(),  strlen(future.getName()));
            hash(future.getMonth(), sizeof(char));
            hash(future.getYear(),  sizeof(short));

            return static_cast<size_t>(hash.computeHash());
        }
    };
// ```

//=============================================================================
//                     GLOBAL TYPEDEFS FOR TESTING
//-----------------------------------------------------------------------------

typedef bslh::WyHashIncrementalAlgorithm Obj;
typedef bsls::Types::Uint64   Uint64;

namespace {
namespace u {

const Uint64 minus1 = static_cast<Uint64>(0) - 1;

struct RandGen {
    // DATA
    Uint64 d_accum;

    // PRIVATE MANIPULATOR
    void munge()
    {
        d_accum = d_accum * 6364136223846793005ULL + 1442695040888963407ULL;
    }

  public:
    // CREATOR
    RandGen() : d_accum(0) {}

    // MANIPULATORS

    /// MMIX Linear Congruential Generator algorithm by Donald Knuth
    unsigned num(Uint64 seed = minus1)
    {
        if (minus1 != seed) {
            d_accum = seed;

            munge();
            d_accum ^= d_accum >> 32;
            munge();
            d_accum ^= d_accum >> 32;
            munge();
        }

        munge();

        return static_cast<unsigned>(d_accum >> 32);
    }

    void randMemory(void *memory, size_t size);

    template <class TYPE>
    void randVal(TYPE *var);
};

void RandGen::randMemory(void *memory, size_t size)
{
    char *ram = static_cast<char *>(memory);
    char *end = ram + size;

    for (size_t toCopy; ram < end; ram += toCopy) {
        unsigned randVal = num();
        toCopy = std::min<size_t>(sizeof(unsigned), end - ram);

#ifdef BSLS_PLATFORM_IS_BIG_ENDIAN
        // always change to little endian

        randVal = bsls::ByteOrderUtil::swapBytes32(randVal);
#endif

        memcpy(ram, &randVal, toCopy);
    }
}

template <class TYPE>
void RandGen::randVal(TYPE *var)
{
    Uint64 accum = num();
    accum |= (static_cast<Uint64>(num()) << 32);

    *var = static_cast<TYPE>(accum);
}

Uint64 mmixRandAccum = 0;

inline
void munge()
{
    mmixRandAccum = mmixRandAccum * 6364136223846793005ULL +
                                                        1442695040888963407ULL;
}

/// MMIX Linear Congruential Generator algorithm by Donald Knuth
inline
unsigned mmixRandNum(Uint64 seed = minus1)
{
    if (minus1 != seed) {
        mmixRandAccum = seed;

        munge();
        mmixRandAccum ^= mmixRandAccum >> 32;
        munge();
        mmixRandAccum ^= mmixRandAccum >> 32;
        munge();
    }

    munge();

    return static_cast<unsigned>(mmixRandAccum >> 32);
}

void mmixRandMemory(void *memory, size_t size)
{
    char *ram = static_cast<char *>(memory);
    char *end = ram + size;

    for (size_t toCopy; ram < end; ram += toCopy) {
        unsigned randVal = mmixRandNum();
        toCopy = std::min<size_t>(sizeof(unsigned), end - ram);

#ifdef BSLS_PLATFORM_IS_BIG_ENDIAN
        // always change to little endian

        randVal = bsls::ByteOrderUtil::swapBytes32(randVal);
#endif

        memcpy(ram, &randVal, toCopy);
    }
}

template <class TYPE>
void mmixRandVal(TYPE *var)
{
    Uint64 accum = mmixRandNum();
    accum |= (static_cast<Uint64>(mmixRandNum()) << 32);

    *var = static_cast<TYPE>(accum);
}

}  // close namespace u
}  // close unnamed namespace

namespace OldHash {

// This namespace contains the code for `bslh::WyHashAlgorithm` before it was
// modified to produce the same result on a segment whether hashed in a
// single run or hashed in contiguous pieces.

            // ----------------------------------------------------
            //                 class WyHashAlgorithmB
            // local functions that had been static in the imp file
            // ----------------------------------------------------

// This was downloaded from
// https://github.com/wangyi-fudan/wyhash/blob/master/wyhash.h
// which had been updated on September 14, 2021, last commit 166f352

// Many cosmetic changes have been made.  There were also many functions not
// relevant to the hash function which have been removed.

// This is free and unencumbered software released into the public domain under
// The Unlicense (http://unlicense.org/)
// main repo: https://github.com/wangyi-fudan/wyhash
// author: Wang Yi <godspeed_china@yeah.net>
// contributors: Reini Urban, Dietrich Epp, Joshua Haberman, Tommy Ettinger,
// Daniel Lemire, Otmar Ertl, cocowalla, leo-yuriev, Diego Barrios Romero,
// paulie-g, dumblob, Yann Collet, ivte-ms, hyb, James Z.M. Gao,
// easyaspi314 (Devin), TheOneric

// quick example:
// string s="fjsakfdsjkf";
// uint64_t hash=wyhash(s.c_str(), s.size(), 0, _wyp);

#define wyhash_final_version_3

//protections that produce different results:
// 0. normal valid behavior
//
// 1. extra protection against entropy loss (probability=2^-63), aka.  "blind
//    multiplication"

// This macro must be kept in sync with
// `BSLH_WYHASHINCREMENTALALGORITHM_WYMUM_XOR` in the header

#undef  U_WYMUM_XOR
#define U_WYMUM_XOR 0

// 0. normal, real version of 64x64 -> 128 multiply, slow on 32 bit systems
//
// 1. not real multiply, faster on 32 bit systems but produces different
//    results

// This macro must be kept in sync with
// `BSLH_WYHASHINCREMENTALALGORITHM_WYMUM_PSEUDO_MULTIPLY` in the header

#undef  U_WYMUM_PSEUDO_MULTIPLY
#define U_WYMUM_PSEUDO_MULTIPLY 0

//likely and unlikely macros
#undef  U_LIKELY
#define U_LIKELY(x)        BSLS_PERFORMANCEHINT_PREDICT_LIKELY(x)
#undef  U_UNLIKELY
#define U_UNLIKELY(x)      BSLS_PERFORMANCEHINT_PREDICT_UNLIKELY(x)
#undef  U_UNLIKELY_HINT
#define U_UNLIKELY_HINT    BSLS_PERFORMANCEHINT_UNLIKELY_HINT

#if U_WYMUM_PSEUDO_MULTIPLY
inline
uint64_t _wyrot(uint64_t x)
{
    return (x >> 32) | (x << 32);
}
#endif

/// 128bit multiply function -- 64x64 -> 128,
/// Result: *A is low 64 bits, *B is high 64 bits
inline
void _wymum(uint64_t *A, uint64_t *B)
{
#if U_WYMUM_PSEUDO_MULTIPLY
    const uint64_t hh = (*A >> 32) * (*B >> 32);
    const uint64_t hl = (*A >> 32) * (uint32_t) *B;
    const uint64_t lh = (uint32_t)*A * (*B >> 32);
    const uint64_t ll = (uint64_t) (uint32_t) *A * (uint32_t) *B;

# if U_WYMUM_XOR
    // pseudo munge (not real multiply) -> xor

    *A ^= _wyrot(hl) ^ hh;
    *B ^= _wyrot(lh) ^ ll;
# else
    // pseudo munge (not real multiply)

    *A = _wyrot(hl) ^ hh;
    *B = _wyrot(lh) ^ ll;
# endif
#elif defined(__SIZEOF_INT128__)
    __uint128_t r = *A; r *= *B;

# if U_WYMUM_XOR
    // multiply -> xor

    *A ^= (uint64_t) r;
    *B ^= (uint64_t) (r >> 64);
# else
    // multiply

    *A = (uint64_t) r;
    *B = (uint64_t) (r >> 64);
# endif
#elif defined(_MSC_VER) && defined(_M_X64)
# if U_WYMUM_XOR
    // multiply -> xor

    uint64_t  a,  b;
    a = _umul128(*A, *B, &b);
    *A ^= a;
    *B ^= b;
# else
    // multiply

    *A = _umul128(*A, *B, B);
# endif
#else
    const uint64_t ha  = *A >> 32,      hb = *B >> 32;
    const uint64_t la  = (uint32_t) *A, lb = (uint32_t) *B;

    const uint64_t rh  = ha * hb, rl  = la * lb;
    const uint64_t rm0 = ha * lb, rm1 = hb * la;
    const uint64_t t   = rl + (rm0 << 32);

    const uint64_t lo  = t  + (rm1 << 32);
    const uint64_t hi  = rh + (rm0 >> 32) + (rm1 >> 32) + (t < rl) + (lo < t);

# if U_WYMUM_XOR
    // multiply -> xor

    *A ^= lo;
    *B ^= hi;
# else
    // multiply

    *A = lo;
    *B = hi;
# endif
#endif
}

//multiply and xor mix function, aka MUM
inline
uint64_t _wymix(uint64_t A, uint64_t B)
{
    _wymum(&A,&B);
    return A^B;
}

//read functions
#if 1 || defined(BSLS_PLATFORM_IS_LITTLE_ENDIAN)

inline
uint64_t _wyr8(const uint8_t *p)
{
    uint64_t v;
    memcpy(&v, p, 8);
    return v;
}

inline
uint64_t _wyr4(const uint8_t *p)
{
    uint32_t v;
    memcpy(&v, p, 4);
    return v;
}

#else

inline
uint64_t _wyr8(const uint8_t *p)
{
    bsls::Types::Uint64 v;
    memcpy(&v, p, 8);

    return bsls::ByteOrderUtil::swapBytes64(v);
}

inline
uint64_t _wyr4(const uint8_t *p)
{
    unsigned v;
    memcpy(&v, p, 4);

    return bsls::ByteOrderUtil::swapBytes32(v);
}

#endif

/// Read a mix of the `k` bytes beginning at `p`, where `k` is in the range
/// `[ 1 .. 3 ]`.
inline
uint64_t _wyr3(const uint8_t *p, size_t k)
{
    BSLS_ASSERT_SAFE(1 <= k && k <= 3);

    return (((uint64_t) p[0]) << 16) | (((uint64_t) p[k >> 1]) << 8) |
                                                                      p[k - 1];
}

//wyhash main function
inline
uint64_t wyhash(const uint8_t  *p,
                size_t          len,
                uint64_t        seed)
{
    // These values were copied directly from the original source.

    static const uint64_t secret[] = { 0xa0761d6478bd642full,
                                       0xe7037ed1a0b428dbull,
                                       0x8ebc6af09c88c6e3ull,
                                       0x589965cc75374cc3ull };

    seed ^= secret[0];
    uint64_t a, b;

    if (U_LIKELY(len <= 16)) {
        if (U_LIKELY(len >= 4)) {
            const size_t subLen = (len >> 3) << 2;

            a = (_wyr4(p)           << 32) | _wyr4(p           + subLen);
            b = (_wyr4(p + len - 4) << 32) | _wyr4(p + len - 4 - subLen);
        }
        else if (U_LIKELY(len > 0)) {
            a = _wyr3(p, len);
            b = 0;
        }
        else {
            U_UNLIKELY_HINT;

            a = b = 0;
        }
    }
    else {
        U_UNLIKELY_HINT;

        const uint8_t *end = p + len;

        if (U_UNLIKELY(end - p > 48)) {
            U_UNLIKELY_HINT;

            uint64_t see1 = seed, see2 = seed;

            do {
                seed = _wymix(_wyr8(p)      ^ secret[1], _wyr8(p +  8) ^ seed);
                see1 = _wymix(_wyr8(p + 16) ^ secret[2], _wyr8(p + 24) ^ see1);
                see2 = _wymix(_wyr8(p + 32) ^ secret[3], _wyr8(p + 40) ^ see2);
                p += 48;
            } while (U_LIKELY(end - p > 48));

            seed ^= see1 ^ see2;
        }

        while (U_UNLIKELY(end - p > 16)) {
            U_UNLIKELY_HINT;

            seed = _wymix(_wyr8(p) ^ secret[1], _wyr8(p + 8) ^ seed);
            p += 16;
        }

        a = _wyr8(end - 16);
        b = _wyr8(end -  8);
    }

    return _wymix(secret[1] ^ len, _wymix(a ^ secret[1], b ^ seed));
}

                        // ===============================
                        // class OldHash::WyHashIncrementalAlgorithmB
                        // ===============================

/// This class wraps an implementation of the "SpookyHash" hash algorithm in
/// an interface that is usable in the modular hashing system in `bslh`.
class WyHashIncrementalAlgorithmB {

    // PRIVATE TYPES

    /// Typedef for a 64-bit integer type used in the hashing algorithm.
    typedef bsls::Types::Uint64 Uint64;

  public:
    // TYPES

    /// Typedef indicating the value type returned by this algorithm.
    typedef Uint64 result_type;

    enum { k_SEED_LENGTH = sizeof(Uint64) };

  private:
    // DATA
    Uint64 d_data;

  private:
    // NOT IMPLEMENTED
    WyHashIncrementalAlgorithmB(const WyHashIncrementalAlgorithmB&)
                                                          BSLS_KEYWORD_DELETED;
    WyHashIncrementalAlgorithmB& operator=(const WyHashIncrementalAlgorithmB&)
                                                          BSLS_KEYWORD_DELETED;

  public:
    // CREATORS

    /// Create a `WyHashIncrementalAlgorithmB` using a default initial seed.
    WyHashIncrementalAlgorithmB();

    explicit WyHashIncrementalAlgorithmB(Uint64 seed);
         // Create a `bslh::WyHashIncrementalAlgorithmB`, seeded with the
         // specified `seed`.

    explicit WyHashIncrementalAlgorithmB(const char *seed);
         // Create a `bslh::WyHashIncrementalAlgorithmB`, seeded with
         // `k_SEED_LENGTH` bytes of data starting at the specified `seed`.

    //! ~WyHashIncrementalAlgorithmB() = default;
        // Destroy this object.

    // MANIPULATORS

    /// Incorporate the specified `data`, of at least the specified
    /// `numBytes`, into the internal state of the hashing algorithm.  Every
    /// bit of data incorporated into the internal state of the algorithm
    /// will contribute to the final hash produced by `computeHash()`.  The
    /// same hash value will be produced regardless of whether a sequence of
    /// bytes is passed in all at once or through multiple calls to this
    /// member function.  Input where `numBytes` is 0 will have no effect on
    /// the internal state of the algorithm.  The behaviour is undefined
    /// unless `data` points to a valid memory location with at least
    /// `numBytes` bytes of initialized memory or `numBytes` is zero.
    void operator()(const void *data, size_t numBytes);

    /// Return the finalized version of the hash that has been accumulated.
    /// Note that this changes the internal state of the object, so calling
    /// `computeHash()` multiple times in a row will return different
    /// results, and only the first result returned will match the expected
    /// result of the algorithm.  Also note that a value will be returned,
    /// even if data has not been passed into `operator()`
    result_type computeHash();
};

// ============================================================================
//                            INLINE DEFINITIONS
// ============================================================================

                            // ----------------------
                            // class WyHashIncrementalAlgorithmB
                            // ----------------------

// CREATORS
inline
WyHashIncrementalAlgorithmB::WyHashIncrementalAlgorithmB()
: d_data(0x50defacedfacade5ULL)
{
}

inline
WyHashIncrementalAlgorithmB::WyHashIncrementalAlgorithmB(Uint64 seed)
: d_data(seed)
{
    BSLMF_ASSERT(sizeof(d_data) == sizeof(seed));
}

inline
WyHashIncrementalAlgorithmB::WyHashIncrementalAlgorithmB(const char *seed)
{
    BSLMF_ASSERT(sizeof(d_data) == k_SEED_LENGTH);

    ::memcpy(&d_data, seed, k_SEED_LENGTH);
        // optimizes to a read of `Uint64 *` on x86

    // Make sure that we will generate the same result, regardless of byte
    // order.  `Seed` is always interpreted as little-endian.

    d_data = BSLS_BYTEORDER_LE_U64_TO_HOST(d_data);
        // optimizes to nothing on little-endian
}

// MANIPULATORS
void WyHashIncrementalAlgorithmB::operator()(const void *data, size_t numBytes)
{
    BSLS_ASSERT(0 != data || 0 == numBytes);

    d_data ^= wyhash(static_cast<const uint8_t *>(data), numBytes, d_data);
}

inline
WyHashIncrementalAlgorithmB::result_type
WyHashIncrementalAlgorithmB::computeHash()
{
    BSLMF_ASSERT(sizeof(result_type) == sizeof(d_data));

    return d_data;
}

}  // close namespace OldHash

typedef OldHash::WyHashIncrementalAlgorithmB OldObj;

                                // ---------
                                // MatchTest
                                // ---------

namespace MatchTest {

// This is downloaded from
// https://github.com/wangyi-fudan/wyhash/blob/master/wyhash.h with as little
// modification as possible, to be compared to make sure that BDE-formatted
// version produces exactly the same results as the original algorithm.

#ifndef WYHASH_CONDOM
//protections that produce different results:
//1: normal valid behavior
//2: extra protection against entropy loss (probability=2^-63), aka.
//   "blind multiplication"
#define WYHASH_CONDOM 1
#endif

#ifndef WYHASH_32BIT_MUM
//0: normal version, slow on 32 bit systems
//1: faster on 32 bit systems but produces different results, incompatible
//   with wy2u0k function
#define WYHASH_32BIT_MUM BSLH_WYHASHINCREMENTALALGORITHM_WYMUM_PSEUDO_MULTIPLY
#endif

//likely and unlikely macros
#if defined(__GNUC__) || defined(__INTEL_COMPILER) || defined(__clang__)
  #define _likely_(x)  __builtin_expect(x,1)
  #define _unlikely_(x)  __builtin_expect(x,0)
#else
  #define _likely_(x) (x)
  #define _unlikely_(x) (x)
#endif

//128bit multiply function
inline uint64_t _wyrot(uint64_t x) { return (x>>32)|(x<<32); }
inline void _wymum(uint64_t *A, uint64_t *B){
#if(WYHASH_32BIT_MUM)
  uint64_t hh=(*A>>32)*(*B>>32), hl=(*A>>32)*(uint32_t)*B, lh=(uint32_t)*A*(*B>>32), ll=(uint64_t)(uint32_t)*A*(uint32_t)*B;
  #if(WYHASH_CONDOM>1)
  *A^=_wyrot(hl)^hh; *B^=_wyrot(lh)^ll;
  #else
  *A=_wyrot(hl)^hh; *B=_wyrot(lh)^ll;
  #endif
#elif defined(__SIZEOF_INT128__)
  __uint128_t r=*A; r*=*B;
  #if(WYHASH_CONDOM>1)
  *A^=(uint64_t)r; *B^=(uint64_t)(r>>64);
  #else
  *A=(uint64_t)r; *B=(uint64_t)(r>>64);
  #endif
#elif defined(_MSC_VER) && defined(_M_X64)
  #if(WYHASH_CONDOM>1)
  uint64_t  a,  b;
  a=_umul128(*A,*B,&b);
  *A^=a;  *B^=b;
  #else
  *A=_umul128(*A,*B,B);
  #endif
#else
  uint64_t ha=*A>>32, hb=*B>>32, la=(uint32_t)*A, lb=(uint32_t)*B, hi, lo;
  uint64_t rh=ha*hb, rm0=ha*lb, rm1=hb*la, rl=la*lb, t=rl+(rm0<<32), c=t<rl;
  lo=t+(rm1<<32); c+=lo<t; hi=rh+(rm0>>32)+(rm1>>32)+c;
  #if(WYHASH_CONDOM>1)
  *A^=lo;  *B^=hi;
  #else
  *A=lo;  *B=hi;
  #endif
#endif
}

//multiply and xor mix function, aka MUM
static inline uint64_t _wymix(uint64_t A, uint64_t B){ _wymum(&A,&B); return A^B; }

//endian macros
#ifndef WYHASH_LITTLE_ENDIAN
  #if defined(_WIN32) || defined(__LITTLE_ENDIAN__) || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || defined(BSLS_PLATFORM_IS_LITTLE_ENDIAN)
    #define WYHASH_LITTLE_ENDIAN 1
  #elif defined(__BIG_ENDIAN__) || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) || defined(BSLS_PLATFORM_IS_BIG_ENDIAN)
    #define WYHASH_LITTLE_ENDIAN 0
  #else
    #error could not determine endianness! Falling back to little endian.
    #define WYHASH_LITTLE_ENDIAN 1
  #endif
#endif

//read functions
#if 1 || (WYHASH_LITTLE_ENDIAN)
inline uint64_t _wyr8(const uint8_t *p) { uint64_t v; memcpy(&v, p, 8); return v;}
inline uint64_t _wyr4(const uint8_t *p) { uint32_t v; memcpy(&v, p, 4); return v;}
#elif defined(__GNUC__) || defined(__INTEL_COMPILER) || defined(__clang__)
inline uint64_t _wyr8(const uint8_t *p) { uint64_t v; memcpy(&v, p, 8); return __builtin_bswap64(v);}
inline uint64_t _wyr4(const uint8_t *p) { uint32_t v; memcpy(&v, p, 4); return __builtin_bswap32(v);}
#elif defined(_MSC_VER)
inline uint64_t _wyr8(const uint8_t *p) { uint64_t v; memcpy(&v, p, 8); return _byteswap_uint64(v);}
inline uint64_t _wyr4(const uint8_t *p) { uint32_t v; memcpy(&v, p, 4); return _byteswap_ulong(v);}
#else
inline uint64_t _wyr8(const uint8_t *p) {
  uint64_t v; memcpy(&v, p, 8);
  return (((v >> 56) & 0xff)| ((v >> 40) & 0xff00)| ((v >> 24) & 0xff0000)| ((v >>  8) & 0xff000000)| ((v <<  8) & 0xff00000000ull)| ((v << 24) & 0xff0000000000ull)| ((v << 40) & 0xff000000000000ull)| ((v << 56) & 0xff00000000000000ull));
}
static inline uint64_t _wyr4(const uint8_t *p) {
  uint32_t v; memcpy(&v, p, 4);
  return (((v >> 24) & 0xff)| ((v >>  8) & 0xff00)| ((v <<  8) & 0xff0000)| ((v << 24) & 0xff000000));
}
#endif
inline uint64_t _wyr3(const uint8_t *p, size_t k) { return (((uint64_t)p[0])<<16)|(((uint64_t)p[k>>1])<<8)|p[k-1];}

//wyhash main function
uint64_t wyhash(const void *key, size_t len, uint64_t seed, const uint64_t *secret){
  const uint8_t *p=(const uint8_t *)key; seed^=*secret; uint64_t        a,      b;
  if (_likely_(len<=16)){
    if (_likely_(len>=4)){ a=(_wyr4(p)<<32)|_wyr4(p+((len>>3)<<2)); b=(_wyr4(p+len-4)<<32)|_wyr4(p+len-4-((len>>3)<<2)); }
    else if (_likely_(len>0)){ a=_wyr3(p,len); b=0;}
    else a=b=0;
  }
  else{
    size_t i=len;
    if (_unlikely_(i>48)){
      uint64_t see1=seed, see2=seed;
      do {
        seed=_wymix(_wyr8(p)^secret[1],_wyr8(p+8)^seed);
        see1=_wymix(_wyr8(p+16)^secret[2],_wyr8(p+24)^see1);
        see2=_wymix(_wyr8(p+32)^secret[3],_wyr8(p+40)^see2);
        p+=48; i-=48;
      } while(_likely_(i>48));
      seed^=see1^see2;
    }
    while (_unlikely_(i>16)){  seed=_wymix(_wyr8(p)^secret[1],_wyr8(p+8)^seed);  i-=16; p+=16;  }
    a=_wyr8(p+i-16);  b=_wyr8(p+i-8);
  }
  return _wymix(secret[1]^len,_wymix(a^secret[1],b^seed));
}

//the default secret parameters
const uint64_t _wyp[4] = {0xa0761d6478bd642full, 0xe7037ed1a0b428dbull, 0x8ebc6af09c88c6e3ull, 0x589965cc75374cc3ull};

struct Alg {
    // DATA
    uint64_t d_data;

    // CREATOR
    Alg()
    : d_data(0x50defacedfacade5ULL)
    {}

    explicit
    Alg(uint64_t seed)
    : d_data(seed)
    {}

    // MANIPULATORS
    void operator()(const void *data, size_t numBytes)
    {
        d_data ^= wyhash(data, numBytes, d_data, _wyp);
    }

    Uint64 computeHash()
    {
        return d_data;
    }
};

#undef WYHASH_CONDOM
#undef WYHASH_32BIT_MUM
#undef _likely_
#undef _unlikely_
#undef WYHASH_LITTLE_ENDIAN

}  // close namespace MatchTest

int numBitsSet(Uint64 x)
{
    int ret = 0;
    for (; x; ++ret) {
        x &= x - 1;
    }

    return ret;
}

// ============================================================================
//                            MAIN PROGRAM
// ----------------------------------------------------------------------------

int main(int argc, char *argv[])
{
    int                 test = argc > 1 ? atoi(argv[1]) : 0;
    bool             verbose = argc > 2;    (void) verbose;
    bool         veryVerbose = argc > 3;    (void) veryVerbose;
    bool     veryVeryVerbose = argc > 4;    (void) veryVeryVerbose;
    bool veryVeryVeryVerbose = argc > 5;    (void) veryVeryVeryVerbose;

    (void)veryVeryVeryVerbose;  // suppress warning

    printf("TEST " __FILE__ " CASE %d\n", test);

    switch (test) { case 0:
      case 9: {
        // --------------------------------------------------------------------
        // USAGE EXAMPLE
        //   The hashing algorithm can be used to create more powerful
        //   components such as functors that can be used to power hash tables.
        //
        // Concerns:
        // 1. The usage example provided in the component header file compiles,
        //    links, and runs as shown.
        //
        // Plan:
        // 1. Incorporate usage example from header into test driver (C-1)
        //
        // Testing:
        //   USAGE EXAMPLE
        // --------------------------------------------------------------------

        if (verbose) printf("USAGE EXAMPLE\n"
                            "=============\n");

// Then, we want to actually use our hash table on `Future` objects.  We create
// an array of `Future`s based on data that was originally from some external
// source:
// ```
        Future futures[] = { Future("Swiss Franc", 'F', 2014),
                             Future("US Dollar", 'G', 2015),
                             Future("Canadian Dollar", 'Z', 2014),
                             Future("British Pound", 'M', 2015),
                             Future("Deutsche Mark", 'X', 2016),
                             Future("Eurodollar", 'Q', 2017)};
        enum { NUM_FUTURES = sizeof futures / sizeof *futures };
// ```
// Next, we create our HashTable `hashTable`.  We pass the functor that we
// defined above as the second argument:
// ```
        HashTable<Future, HashFuture> hashTable(futures, NUM_FUTURES);
// ```
// Now, we verify that each element in our array registers with count:
// ```
        for ( int i = 0; i < 6; ++i) {
            ASSERT(hashTable.contains(futures[i]));
        }
// ```
// Finally, we verify that futures not in our original array are correctly
// identified as not being in the set:
// ```
        ASSERT(!hashTable.contains(Future("French Franc", 'N', 2019)));
        ASSERT(!hashTable.contains(Future("Swiss Franc", 'X', 2014)));
        ASSERT(!hashTable.contains(Future("US Dollar", 'F', 2014)));
// ```
      } break;
      case 8: {
        // --------------------------------------------------------------------
        // PLATFORM INDEPENDENCE TEST
        //
        // Concerns:
        // 1. That all platforms get the same hash values for given memory
        //    input.
        //
        // Plan:
        // 1. Use the `mmix*` random number generator in the `u` namespace in
        //    this file to create input data.  The `MMIX` algorithm is a
        //    modification of Donald Knuth's random number algorithm, and it
        //    produces the same result regardless of platform and CPU
        //    endian-ness.
        //
        // 2. In each iteration, seed the `mmix` random number generator in
        //    the `u` namespace in this file with the iteration counter.
        //
        // 3. Use the now-seeded random number generator to populate a buffer
        //    with data.
        //
        // 4. Use the random number generator to produce a random number seed.
        //
        // 5. Hash the buffer, with and without using the generated seed, to
        //    create 2 hash values.
        //
        // 6. Compare the hash values created with the hash values in the
        //    table, and confirm that they match.
        //
        // 7. Since the table values are the same across all platforms, running
        //    this test on all platforms confirms that the hash function is
        //    platform-independent.
        //
        // 8. In a second, similar loop, iterate through the elements in the
        //    table several times, except this time:
        //    - Offsetting the buffer to be hashed by a random amount in the
        //      range `[ 0 .. 7 ]` to make sure that results don't depend on
        //      buffer alignment.
        //
        //    - Do the hash of the buffer in segments of randomly chosen
        //      length, to verify that hashing in segments gives the same
        //      result as hashing buffer in a single hash.
        //
        // 9. Have a separate version of the table if `..._PSEUDO_MULTIPLY` is
        //    enabled, to ensure correctness after modification of the
        //    condtionally compiled pseudo multiplication implmentation.
        //
        // Testing:
        //   PLATFORM INDEPENDENCE
        // --------------------------------------------------------------------

        if (verbose) printf("PLATFORM INDEPENDENCE TEST\n"
                            "==========================\n");

        static const struct Data {
            int      d_line;
            unsigned d_len;
            Uint64   d_hash;
            Uint64   d_seedlessHash;
        } DATA[] = {
#if defined(BSLS_PLATFORM_IS_LITTLE_ENDIAN)
            { L_,    0, 0x0840b4221c56e786ULL, 0xe0a732a8bf7d7e68ULL },
            { L_,    1, 0xd2e76925e210d3cfULL, 0xc148bd58364217b0ULL },
            { L_,    2, 0x7f7295ca10b85125ULL, 0x6b435e94355591ccULL },
            { L_,    3, 0xc0c3febe8e225d76ULL, 0xbdc63ece1ff113edULL },
            { L_,    4, 0x265412a7905945daULL, 0x9683a40424114d77ULL },
            { L_,    5, 0xd8446241c2f5cba7ULL, 0x12ace40bf6080d66ULL },
            { L_,    6, 0x0e82a29294205926ULL, 0xe77265e6dc8b1956ULL },
            { L_,    7, 0xfbf69aa1eb5d0ab4ULL, 0x2e62383ee557733fULL },
            { L_,    8, 0x63ec8478d268ff64ULL, 0x2e7149a6e9ab97f2ULL },
            { L_,    9, 0xd0e0a22bf719e4d0ULL, 0x745b86e5a55bcdaeULL },
            { L_,   10, 0x3fb791bb6d323e44ULL, 0xda6b575752f592a8ULL },
            { L_,   11, 0xe90c40e8be4a4d2dULL, 0x75f9deb0007c3b33ULL },
            { L_,   12, 0xa616e0afdf6f0b5cULL, 0x60812d3aba2607dcULL },
            { L_,   13, 0x054ce64c43a8a17cULL, 0x8510bf1bafc8d60cULL },
            { L_,   14, 0xeaa0cae988990e4aULL, 0x2a637ac9d3266b2bULL },
            { L_,   15, 0x10b1aa7b0903e065ULL, 0x47ab89f3f2cd83faULL },
            { L_,   16, 0x00f08a1f65ee4afeULL, 0xefa30473c2e4c575ULL },
            { L_,   17, 0x540dbe2595eb73d8ULL, 0x6ffd989ab22bc4eeULL },
            { L_,   18, 0xce7746b930832f9eULL, 0x9a7e0c6e21955d04ULL },
            { L_,   19, 0xa422e395943fc25eULL, 0x7db5440bb207b0b9ULL },
            { L_,   20, 0xa5a0cd01ec402747ULL, 0x2cf922c529630df0ULL },
            { L_,   21, 0xe5bcd4e37871a0f4ULL, 0x57a0c87ae1ea57a4ULL },
            { L_,   22, 0x77e366ae419f227fULL, 0x087631f1eb486142ULL },
            { L_,   23, 0xc170537ac4baec43ULL, 0x0e6bc6cb6cb0daf7ULL },
            { L_,   24, 0xeaebaa8ffb72d8a6ULL, 0xac4f2f0a0075ebdbULL },
            { L_,   25, 0xa986caefd2c9ba1bULL, 0x5564a00ef56d63dcULL },
            { L_,   26, 0x1dc71f45e4422bb2ULL, 0x70ec22e2260f04c3ULL },
            { L_,   27, 0x30014325d9dd470dULL, 0x2d8f87742967e853ULL },
            { L_,   28, 0xd4853210adda6893ULL, 0x137ddab26de321f2ULL },
            { L_,   29, 0x864d869833c38ca1ULL, 0x4b138619f98b3146ULL },
            { L_,   30, 0x1c41ccfcc37deed8ULL, 0x19d692030eabce8aULL },
            { L_,   31, 0xadb2e4f3cd5b148cULL, 0x48fe93438f5e1a81ULL },
            { L_,   32, 0x7ac5ef8a387c716dULL, 0x398295062b397acaULL },
            { L_,   33, 0x8e9d2da66cbeb3c4ULL, 0xe1e70e60b035db1dULL },
            { L_,   34, 0xd63f40d73317cbc4ULL, 0x09b951910781aaf3ULL },
            { L_,   35, 0x978a5c54a7ce73fbULL, 0xf46a1e0b26fc3278ULL },
            { L_,   36, 0x2917d0ec576c7da3ULL, 0xde920f0e726893f4ULL },
            { L_,   37, 0x6ee6621032df51adULL, 0xaafe273dbf9f0787ULL },
            { L_,   38, 0xbcfeb646c87c34a0ULL, 0x55a5ae3894627c4dULL },
            { L_,   39, 0xef7e74a8b89cc0b7ULL, 0x12b125d480d27a5fULL },
            { L_,   40, 0xcc84ce412cc525e3ULL, 0x2560dd1a765afaf5ULL },
            { L_,   41, 0x77c895947bbb2a49ULL, 0x87ad18244f15eb8fULL },
            { L_,   42, 0x707babdc48d541baULL, 0x44ae8a16cf5e0ae3ULL },
            { L_,   43, 0x2abbc1654062648bULL, 0xec48404b189f6df8ULL },
            { L_,   44, 0xc49c9bc6121d188fULL, 0xad99b9c54753b40dULL },
            { L_,   45, 0xeb566c3234872820ULL, 0x7b9371dc6f0642f8ULL },
            { L_,   46, 0x7bd0ca3e1017d0e5ULL, 0x62a9ffcf302a3461ULL },
            { L_,   47, 0xd9b2eeb167bb5454ULL, 0xf01e7623b331387bULL },
            { L_,   48, 0x784a3a7bd20bfaa2ULL, 0x9fca5880933fb0d9ULL },
            { L_,   49, 0xd9d9ff94ab97d115ULL, 0xd0b3815f0acc0d5fULL },
            { L_,   50, 0x3772baf11d95303bULL, 0x1cc85fb767413f34ULL },
            { L_,   51, 0xfc2b981f880d2e17ULL, 0x795b9f053850f7a2ULL },
            { L_,   52, 0x3bce47c758a5d726ULL, 0xc3c024b1ac5993e0ULL },
            { L_,   53, 0xc2b82bb7e8812049ULL, 0x3b88ba4b6a5f46cdULL },
            { L_,   54, 0x242be0f513e9290cULL, 0x168591d45153f78dULL },
            { L_,   55, 0x6c1b9f63afcd651dULL, 0x8ab45c4898a8f584ULL },
            { L_,   56, 0x1192b7cf45aa3e94ULL, 0x0eb395e7dc4bdefeULL },
            { L_,   57, 0x21e0ba0ee7fa13b1ULL, 0xda169e8208684910ULL },
            { L_,   58, 0x85f7e268c64d7f88ULL, 0xd9513aebab5934e7ULL },
            { L_,   59, 0x861bb28b88195c1dULL, 0x066f64b206f8512dULL },
            { L_,   60, 0x0bc7b63f457fd02cULL, 0x60e100ce76467417ULL },
            { L_,   61, 0x9db41b78b14623dfULL, 0xaea50325d129d0c4ULL },
            { L_,   62, 0x20b8854eaaab750dULL, 0xda32158ff7d3a04dULL },
            { L_,   63, 0x9f275b8f3c72703aULL, 0x2e6d0b5460b2de17ULL },
            { L_,   64, 0xf7264eba098773d4ULL, 0xcfdbdc4724b5e569ULL },
            { L_,   65, 0x690f8332baf6ead2ULL, 0x50c24dc3bbbb6f5cULL },
            { L_,   66, 0x7c8fe2a6f9a2da1cULL, 0xaedbf3ed25182d0bULL },
            { L_,   67, 0x7dcab376cf345327ULL, 0xa134fd7782f32854ULL },
            { L_,   68, 0xba01b4999b9b2c46ULL, 0x06f9888cd01d45ddULL },
            { L_,   69, 0xf63ce727bbfe6538ULL, 0xb107b33b0645d640ULL },
            { L_,   70, 0xd1ae6408c5835c40ULL, 0x70a45dc41eed1594ULL },
            { L_,   71, 0x6486dbfe63d60ab7ULL, 0x8b237b8c23b1de93ULL },
            { L_,   72, 0xaf8a324f453cf05fULL, 0x00c6ad2a4986ec2dULL },
            { L_,   73, 0xbbb584ea0fb5ff4cULL, 0xfe45e4192278ca17ULL },
            { L_,   74, 0xe94f99ee5f3a1df4ULL, 0x5c742ee0ea400c6fULL },
            { L_,   75, 0x7fd8fa0bee5439c8ULL, 0xcb706ad67d8e1ee3ULL },
            { L_,   76, 0xf7c0ba560bb3f732ULL, 0x18fbe2d0dad40e33ULL },
            { L_,   77, 0x71c3c8c0328d5dc7ULL, 0x16e195251c62d510ULL },
            { L_,   78, 0x844ee9e0c78aa049ULL, 0xe4ebff13933f09b0ULL },
            { L_,   79, 0x148244fad3548c3aULL, 0xd0809293db898719ULL },
            { L_,   80, 0xc878fc1b8200f05dULL, 0x9db56c060f266502ULL },
            { L_,   81, 0x942d3b58f4595d75ULL, 0x1dc7c8db0193d1feULL },
            { L_,   82, 0x0a9714e2013206fbULL, 0x637f94ae64a6becfULL },
            { L_,   83, 0x37b6da53347d0a3aULL, 0x2919770edfe02641ULL },
            { L_,   84, 0x75e1435bb931a469ULL, 0xb1b2df03c767269aULL },
            { L_,   85, 0xb4249c1a7f920941ULL, 0x65d9181bf5e235c8ULL },
            { L_,   86, 0x29b0013d3f49761aULL, 0xd0481f9bfa81822fULL },
            { L_,   87, 0xecee003da7ee7ca2ULL, 0x64fac0446dd25c46ULL },
            { L_,   88, 0xf01dfaa169e900f6ULL, 0x963686b8e311e905ULL },
            { L_,   89, 0xa6943adf4b068a29ULL, 0x1177ecd9ba27c4ddULL },
            { L_,   90, 0x92b16a461664386eULL, 0x4eba672d8ce245daULL },
            { L_,   91, 0x063e8b875acaa067ULL, 0xaf66cc8a9052d3c7ULL },
            { L_,   92, 0x34cb66db6e875430ULL, 0x22b16b37969e062dULL },
            { L_,   93, 0xa255b058397e7219ULL, 0xb432a7bffa061117ULL },
            { L_,   94, 0x9bd656ac4c492613ULL, 0x59e681c7258076aeULL },
            { L_,   95, 0x4c92a5fd931afcaaULL, 0x27996a62ab96402cULL },
            { L_,   96, 0xfd7a79af556f9608ULL, 0xf117c97958152845ULL },
            { L_,   97, 0x5e8718725b3504bfULL, 0x8ee569ab0dfbd93eULL },
            { L_,   98, 0xe1234976bbc60dafULL, 0x690db421736c0997ULL },
            { L_,   99, 0xaf13757d1b5f4bd1ULL, 0xa31cbbd8293704f1ULL },
            { L_,  100, 0x4c7587a483bd9767ULL, 0xb2de9002bbe509e6ULL },
            { L_,  101, 0x23dc7947c4101bc4ULL, 0x813a1fe648613ce4ULL },
            { L_,  102, 0xba42a5c60cd54deaULL, 0x5ec1991d3506ef4aULL },
            { L_,  103, 0xd20a7bff237426e7ULL, 0x066ac02cdbe2ef7dULL },
            { L_,  104, 0xd7eac94a647d104dULL, 0x42b6c2f68f9cb1caULL },
            { L_,  105, 0x586836bb33c56e52ULL, 0xf032246fb2dcf364ULL },
            { L_,  106, 0xbc166bb1608742bdULL, 0x61d67cdcffb14f8bULL },
            { L_,  107, 0x5030a717ba42eee2ULL, 0x5a3d13fc90ea0d1fULL },
            { L_,  108, 0x6a7612b8fbd6b196ULL, 0xee89b5dbc4a5e6d2ULL },
            { L_,  109, 0x01b8f47201bd48b3ULL, 0x4ae851ecb16a4715ULL },
            { L_,  110, 0xf4c1595ed7bf131aULL, 0x17a4ed4b61758172ULL },
            { L_,  111, 0x62dcb5bd57048097ULL, 0x256d7ec5c2f9d48bULL },
            { L_,  112, 0x0ce50b1b51ef15a5ULL, 0xe18c0eb942eef8aaULL },
            { L_,  113, 0x6f9dd192e76b7218ULL, 0xd29e6419bb23d82fULL },
            { L_,  114, 0x1db13abf0f812365ULL, 0x7e4697c0ab9445cdULL },
            { L_,  115, 0x06fbae15b5dfa839ULL, 0x5cd5311cd789b407ULL },
            { L_,  116, 0x4fb2969b9b7a3f8cULL, 0x9b68a8a13d098344ULL },
            { L_,  117, 0x8b2f4b6556773129ULL, 0x8613d90b1f708b00ULL },
            { L_,  118, 0xa6ce8a8859878abdULL, 0x341c2246236af39fULL },
            { L_,  119, 0x2f0f36521e47e164ULL, 0xc6a01e557025ac71ULL },
            { L_,  120, 0x163ab33d53b07b3dULL, 0xe8a9ab669d598642ULL },
            { L_,  121, 0x19041396040fe9a5ULL, 0xc3881f6e7bfdc746ULL },
            { L_,  122, 0x98cbd3b7282864dfULL, 0xf7123ed69f50a568ULL },
            { L_,  123, 0x1822c7efe5e312c2ULL, 0x93016be9a97d1ddaULL },
            { L_,  124, 0xaf403ad04a5dfaa4ULL, 0x4f80f463cbb075aeULL },
            { L_,  125, 0x7c7bef53b6bf26ecULL, 0x7d267ce6f7d902d6ULL },
            { L_,  126, 0xdad143af9a8e3536ULL, 0xc5c2e519f5d6c615ULL },
            { L_,  127, 0xd42ca470c54c5498ULL, 0xf3e043c821bd895eULL },
            { L_,  128, 0x5a0c4492653ac553ULL, 0xdecaa9b0c1eef52dULL },
            { L_,  129, 0xd8a4394a42c4c5dfULL, 0xbe33df970088f6a5ULL },
            { L_,  130, 0x6c222d12b9d727d3ULL, 0x8c7f303df5ecd65cULL },
            { L_,  131, 0x758a92c808e366fbULL, 0xf858607d8178d3bbULL },
            { L_,  132, 0x2d1aa1776535dddeULL, 0x896d322fc6b94d0cULL },
            { L_,  133, 0xe6c038121f76d1dbULL, 0xefc3ae8e5a2b0e3eULL },
            { L_,  134, 0x998e389bedd7bd10ULL, 0x9e8b282c7fb4d3c7ULL },
            { L_,  135, 0x6a4a9ac746618b59ULL, 0xf6c826b935ebc059ULL },
            { L_,  136, 0xdad9ae716a9980feULL, 0xae9de6719843be7aULL },
            { L_,  137, 0x2c9e1277186b6d1eULL, 0xd464441556e7b4aeULL },
            { L_,  138, 0xacc5a93efac48ccfULL, 0xb04f5099ee97ac55ULL },
            { L_,  139, 0x03010b1e9a3b0a1cULL, 0x9cf6dcea4a31d181ULL },
            { L_,  140, 0xb933b9be75dd5d1bULL, 0x4b2b351f3ac7ffd4ULL },
            { L_,  141, 0x57641ad65caf05b3ULL, 0x2555fdf4ae1b76beULL },
            { L_,  142, 0x1bd3cfc64ad04554ULL, 0x082f497072c4e31fULL },
            { L_,  143, 0x7755f80ca48b1233ULL, 0x9122a49a57678c38ULL },
            { L_,  144, 0xc15188e03386a312ULL, 0xf6cc482e4eb30240ULL },
            { L_,  145, 0xba654358cfc8b21fULL, 0xdfc5b09faa79b0f9ULL },
            { L_,  146, 0xb385208057b221e0ULL, 0xbb7c9583c837a9cbULL },
            { L_,  147, 0xf5db3d3bf360fb1fULL, 0xdb64f11a3d1c1900ULL },
            { L_,  148, 0x287202b212d37b36ULL, 0x8b6bfc78869530baULL },
            { L_,  149, 0x10cfe8f3684bb539ULL, 0xec8e54029f64b8dcULL },
            { L_,  150, 0x11d551f7e0a4c262ULL, 0x7bf573d279c113a0ULL },
            { L_,  151, 0xa011ac038ab61cb2ULL, 0x44d72cf398b44654ULL },
            { L_,  152, 0x266b0bbcd161919cULL, 0x8a850fa1af5deb80ULL },
            { L_,  153, 0x13be06f515d088beULL, 0x7e0e4da8b92558cfULL },
            { L_,  154, 0xf21f4cb24aac0a89ULL, 0xba9abdb00674f62eULL },
            { L_,  155, 0x31b4364adbdba5c2ULL, 0xba3f9421e2767b9bULL },
            { L_,  156, 0x8c211bc349e57d20ULL, 0x033f9c5d7e2a600cULL },
            { L_,  157, 0x28f8a806bd2551f5ULL, 0xddef5b2dfde73a81ULL },
            { L_,  158, 0x0bf0b00ee65783bbULL, 0x1812a4ffdfa9c54bULL },
            { L_,  159, 0x6a1a784580b18f22ULL, 0x181f157aa0744c02ULL },
            { L_,  160, 0x60e4e8dc62aca0d6ULL, 0xcf84f0e8de301ec3ULL },
            { L_,  161, 0xcfd932456817d8f8ULL, 0x2605db40eb12f295ULL },
            { L_,  162, 0xb0c864b7c3823be2ULL, 0x185ec443b877a630ULL },
            { L_,  163, 0x7262e62130b3d56fULL, 0xa9525744bf723d00ULL },
            { L_,  164, 0xbbaba8483ff39fc1ULL, 0x6e9e5f6f6f2ba65cULL },
            { L_,  165, 0xe1633788ed7e7486ULL, 0x6336458cd0ad159bULL },
            { L_,  166, 0x9e851d2cc926411cULL, 0x479483722b1cccd8ULL },
            { L_,  167, 0x7d9c5bd942c21dc8ULL, 0xc50ed7630d6dc0eeULL },
            { L_,  168, 0x69d5c989b716b648ULL, 0xd7467b4c4b42694eULL },
            { L_,  169, 0xfaa401ad49780b1dULL, 0xc02510f7423c8303ULL },
            { L_,  170, 0x3a22ffd61895413eULL, 0x640f4b7e4f0e0d90ULL },
            { L_,  171, 0x52422e8754e62427ULL, 0xbe7a0c160189da27ULL },
            { L_,  172, 0xe79bb34edadc8bb9ULL, 0xc8ad6330799f9c74ULL },
            { L_,  173, 0x85603d845f254649ULL, 0xbdf804f279ec5d09ULL },
            { L_,  174, 0x0f6e7bd23a34dcf0ULL, 0xc986a270a3ef0abcULL },
            { L_,  175, 0xf72e15e910cee741ULL, 0x4a797ed42d60e51cULL },
            { L_,  176, 0x79dba1979991d8d6ULL, 0xab534d5c99987122ULL },
            { L_,  177, 0x3756559cfe457a6cULL, 0x043faa8633cf0de4ULL },
            { L_,  178, 0x90751fa80c141e14ULL, 0xf5a8c9ca3515048aULL },
            { L_,  179, 0x521fe77ec24160fdULL, 0xa18d0f06bfddc5f1ULL },
            { L_,  180, 0x93b85048bda29f5eULL, 0xd1291035995be106ULL },
            { L_,  181, 0xfa73fc702dfc1b26ULL, 0x41b5c0e35e8bfd70ULL },
            { L_,  182, 0x1e48b960ca9742ecULL, 0x1394eee1fd2d25a1ULL },
            { L_,  183, 0x25e4ca42d1755211ULL, 0x27897a8a0fc843eeULL },
            { L_,  184, 0xe15719de93006a78ULL, 0x934636327778ee95ULL },
            { L_,  185, 0x34ff587b95b6fcf9ULL, 0x7ae3b1e4121f725aULL },
            { L_,  186, 0xfcbdbafb50c42bcfULL, 0xcbb26af5ba797670ULL },
            { L_,  187, 0xec6b0d5b3e047d47ULL, 0xf3cfa8141306c7b2ULL },
            { L_,  188, 0xc47e1059b555aa95ULL, 0xcaaef7355a612a09ULL },
            { L_,  189, 0xdede031457166c4dULL, 0xf98c84a836fcf86aULL },
            { L_,  190, 0x8c61355918e61383ULL, 0xbf0e713209b912b8ULL },
            { L_,  191, 0x46c074ea2bccbd6dULL, 0x171ab3996d3cdb2eULL },
            { L_,  192, 0x08459e8fee2b27dcULL, 0x3a5f77acb5d86fe6ULL },
            { L_,  193, 0x8ff097bee8b8190aULL, 0x8fadba64b61bece7ULL },
            { L_,  194, 0x0a66e74511878d4dULL, 0xd662748082d2c319ULL },
            { L_,  195, 0xb0f3921bd692331fULL, 0x5a7d01e707b2b9f1ULL },
            { L_,  196, 0x756322669c45e7e5ULL, 0x9ef8b86afbb6c6b7ULL },
            { L_,  197, 0x4382441bc3eaca5eULL, 0xf1fee0944690fd57ULL },
            { L_,  198, 0xd3882ba41ca48cc7ULL, 0x6150ab29c90ebf56ULL },
            { L_,  199, 0xe47bab11a8c86503ULL, 0xc5f955b9d5ce2119ULL },
            { L_,  200, 0x6bda4a328403f71aULL, 0xe96cad3c4e2412d2ULL },
            { L_,  201, 0xf3b341fc27dcf65eULL, 0x5fb2f2b92a44acf6ULL },
            { L_,  202, 0x3f09feab7fa0bfb4ULL, 0xd772adf121cb5a02ULL },
            { L_,  203, 0x5b283236392965feULL, 0xc69b6796260017bcULL },
            { L_,  204, 0xed766c60e1aed628ULL, 0x06ac1656c63b37ebULL },
            { L_,  205, 0xa93824fa9283fbc8ULL, 0xe0d58bdd1f4df396ULL },
            { L_,  206, 0x495e81dfaf7ac513ULL, 0x97ecd9c6333e864cULL },
            { L_,  207, 0x0a6cc03cfe6346baULL, 0x55fac6f4b5aff5e5ULL },
            { L_,  208, 0xed55b2a3fd4ada08ULL, 0xd20942a0ca035cceULL },
            { L_,  209, 0xb9ce4f7e22dc8e26ULL, 0xd21eaf2405b09b20ULL },
            { L_,  210, 0x64f04cdc5b521a99ULL, 0x3989c5c0028cedbaULL },
            { L_,  211, 0x82787718262c3e60ULL, 0x9a052e10afb4a93dULL },
            { L_,  212, 0xb6700adc34d94fc8ULL, 0xa3e4aae211265297ULL },
            { L_,  213, 0xf9ec2ca92abb27a0ULL, 0x45e0bfc2718eda54ULL },
            { L_,  214, 0x59cbd7c68060a39aULL, 0xfe2a19db7b475398ULL },
            { L_,  215, 0x89e77be9c920f190ULL, 0x58ca1957047212eaULL },
            { L_,  216, 0xf00dc32256917aa2ULL, 0x42c88fc77dab0099ULL },
            { L_,  217, 0x1139f7f68491c710ULL, 0x8f354b96ba7b878fULL },
            { L_,  218, 0x161818ebe59c4ac0ULL, 0x62fb24f292ebb3b8ULL },
            { L_,  219, 0xcb7ee4a96ba95241ULL, 0x34999ab5ffca2771ULL },
            { L_,  220, 0x657168a269ba6440ULL, 0xb3a8aad1db08536dULL },
            { L_,  221, 0x21a5b56ffccb8a70ULL, 0x18d8943cd5849838ULL },
            { L_,  222, 0x2cbfc8f260ec144cULL, 0xcf913bf99314b6caULL },
            { L_,  223, 0xd2fe727fd070d156ULL, 0x9d4d0bfe7281fcdcULL },
            { L_,  224, 0xc08b0da1a9222641ULL, 0xd8ff43aa2c45a287ULL },
            { L_,  225, 0xf206088371e79dbbULL, 0x7d11eab771ed7de7ULL },
            { L_,  226, 0x035fc33e7b6d8ec2ULL, 0xca1de2f0e8785b04ULL },
            { L_,  227, 0xf4aef7b70bc0fbe7ULL, 0x0b7424aa351cfc5dULL },
            { L_,  228, 0xb2f601565f696e63ULL, 0x9baae3323a902097ULL },
            { L_,  229, 0xb3591b309d15ae6eULL, 0x44e984ba18bcc26bULL },
            { L_,  230, 0x7dd68a44ce005a38ULL, 0x4ec8903ffcb3ce62ULL },
            { L_,  231, 0x6239cbd1a5cd4872ULL, 0xef842383378ed3ebULL },
            { L_,  232, 0x5796d1d1a5ca2550ULL, 0x749a9021a6b85e02ULL },
            { L_,  233, 0x533098ca5c7ae635ULL, 0x41221875d283a798ULL },
            { L_,  234, 0x1c660c8ad8ff5ef6ULL, 0xc0668588aac79fd9ULL },
            { L_,  235, 0x8e6133db4c92ed37ULL, 0xdcd44eac614a1a1fULL },
            { L_,  236, 0x382c9c09ecf41e94ULL, 0x5b59a6acedc42e74ULL },
            { L_,  237, 0xe026914cd12c04aaULL, 0xac91e1558bd4d8faULL },
            { L_,  238, 0xcb5e5e4293560ea3ULL, 0x0cf4373a2c51acf2ULL },
            { L_,  239, 0xe8a12b902ddbc0b7ULL, 0x7104d820b74cd99cULL },
            { L_,  240, 0x98c31f11aadf5a55ULL, 0x27dfeb0c01b43b0eULL },
            { L_,  241, 0xb7e3a92d04077f4bULL, 0x35f3d6bbf67fd2e0ULL },
            { L_,  242, 0xd9050789443d5cbdULL, 0x7a2fc13b9cb3b5f8ULL },
            { L_,  243, 0x35b34e1af30abb9cULL, 0xa9ea3576063c1f48ULL },
            { L_,  244, 0x8a9f7d650a85b105ULL, 0xdbd91a07863aa2daULL },
            { L_,  245, 0xa931cd3271023e1bULL, 0xfc81c56347f23081ULL },
            { L_,  246, 0xb51b369ab3cca8f7ULL, 0x9b0a3133021a3fe4ULL },
            { L_,  247, 0xe4dcbf389b9d8f86ULL, 0xce200f945c827e3eULL },
            { L_,  248, 0xe22cda907ea08ee0ULL, 0xd3ac04672aac9efbULL },
            { L_,  249, 0xbb984bf58957c254ULL, 0xc26927808e8de023ULL },
            { L_,  250, 0x892d1aea4949b472ULL, 0x45205a6fe69296b6ULL },
            { L_,  251, 0xea48400739aafdcdULL, 0x64ac9e5fb2458d11ULL },
            { L_,  252, 0x1bcad28f3b271c0dULL, 0x518eda39523d6d96ULL },
            { L_,  253, 0x1e79f411186bda4eULL, 0xe87ad42408351061ULL },
            { L_,  254, 0x0c5992e7781d7e95ULL, 0x57a90bd021c76814ULL },
            { L_,  255, 0x1b3275fc1ebf1ce5ULL, 0xa8f96b4928247939ULL },
            { L_,  256, 0x6d5137ee64577714ULL, 0x2c015a7109802866ULL },
            { L_,  257, 0x7d7892895705b8faULL, 0x3e1184b1a2570e69ULL },
            { L_,  258, 0xccacd2858010fec7ULL, 0x718a921d68444fa2ULL },
            { L_,  259, 0xc471e157bb05895aULL, 0x99b05c3e1a6eefc4ULL },
            { L_,  260, 0x068516daee89624cULL, 0x337986eff5c7b835ULL },
            { L_,  261, 0x090ba874cf427bf0ULL, 0xd0c6ed04cea4b33eULL },
            { L_,  262, 0x93a4477260430de5ULL, 0x83ea9255cd3ae89bULL },
            { L_,  263, 0xa5fa1d44e714897dULL, 0x2e5ab991ba406366ULL },
            { L_,  264, 0x4b1f66ac426347e8ULL, 0x0e575b5f24e4c3d1ULL },
            { L_,  265, 0x2d4ececceea2fa97ULL, 0x3578b5ea8cc6fea8ULL },
            { L_,  266, 0x143bd02bb13ee9b2ULL, 0x4ec9cb52ac0ec11aULL },
            { L_,  267, 0xdc2a3da29a4ef921ULL, 0xba23e02518ca0660ULL },
            { L_,  268, 0x93917733ee6e062dULL, 0xde5b50825e7f87b5ULL },
            { L_,  269, 0x4de990637ae9d5faULL, 0x3c79da1265653c2aULL },
            { L_,  270, 0x514797e4920c577cULL, 0x6c6f5bd0f2ac06cfULL },
            { L_,  271, 0x417e9bac163406abULL, 0x2674ad4860c2f984ULL },
            { L_,  272, 0x1f79fd89e0ec9837ULL, 0xd10d334ed3f2d34fULL },
            { L_,  273, 0x23a01c1e93b3d21bULL, 0x7cb4ce33572f3086ULL },
            { L_,  274, 0xb054269f7b099de9ULL, 0x35137263ae5e8d23ULL },
            { L_,  275, 0x894a6b2eed2583faULL, 0x866595347725aec3ULL },
            { L_,  276, 0x629187265cdde451ULL, 0xd61c8e3d4ea23dfdULL },
            { L_,  277, 0xb9e653f223e92598ULL, 0xc6a0cb2dea768f18ULL },
            { L_,  278, 0xf88b8497b4d130c9ULL, 0xc41dab0d31491e75ULL },
            { L_,  279, 0x96140c3a088d74fdULL, 0xe10629addecc647cULL },
            { L_,  280, 0x0b2b85d4a4ed5867ULL, 0x7982482db217a96aULL },
            { L_,  281, 0x074eb983b2fd633bULL, 0x7689933fcd9bb933ULL },
            { L_,  282, 0x70fa77c78a42eac3ULL, 0x2e3d400d4234d003ULL },
            { L_,  283, 0x2a589477dd59c858ULL, 0xd52ff71564d698f0ULL },
            { L_,  284, 0xab221646ce49677fULL, 0xd726de5b08f83413ULL },
            { L_,  285, 0x3300cda1a4b33f8cULL, 0x7ce6c8f65a7dbcfeULL },
            { L_,  286, 0x1aeb8f5a95c758e1ULL, 0x1a95d7148fe13b93ULL },
            { L_,  287, 0xc81dae0e963622e4ULL, 0x32e514ddaedf6edfULL },
            { L_,  288, 0xddebd56325453b02ULL, 0xef0b465af37d1c41ULL },
            { L_,  289, 0x69283e88b9449446ULL, 0x03d0e4dedf34236fULL },
            { L_,  290, 0x5b9fb028abd77914ULL, 0x0497df1bfe7d794cULL },
            { L_,  291, 0xdddc9bd002d91481ULL, 0x39608b9d384dcb9cULL },
            { L_,  292, 0x78b4f604b6a030e3ULL, 0x7f502b20e8ef2ee1ULL },
            { L_,  293, 0xbb9f902fa26439b6ULL, 0x730b1bde999e7840ULL },
            { L_,  294, 0xf9a3d219437a5a2fULL, 0x957f33ba2b292ac2ULL },
            { L_,  295, 0x3efd009f2827973fULL, 0x90c346022e9016e0ULL },
            { L_,  296, 0x913b529c44832d93ULL, 0x88eef2712e8485f3ULL },
            { L_,  297, 0x1aa1aeac3609c374ULL, 0x3ba93043059a79aaULL },
            { L_,  298, 0x805b24292012668aULL, 0xb86218d5057f59e6ULL },
            { L_,  299, 0x78538e94a4f753b3ULL, 0x62047b62032f586dULL },
            { L_,  300, 0x3eb072947f6a3e14ULL, 0xa51ad9858d68e500ULL },
            { L_,  301, 0x14a4fda73bea968dULL, 0x8749215cfe08961eULL },
            { L_,  302, 0x588de99b929bd418ULL, 0x1a870c0974eb27f3ULL },
            { L_,  303, 0x223da58166ca86b3ULL, 0x3ecaa077fd806510ULL },
            { L_,  304, 0xd81ebf6a37e174b8ULL, 0xd067d338de4eb532ULL },
            { L_,  305, 0x837a037d36054c1bULL, 0xe10be95238440721ULL },
            { L_,  306, 0x7b8c69a63862d526ULL, 0x27108319dca5e15aULL },
            { L_,  307, 0x729dae8d99d700f6ULL, 0xecd40fc0e26e8039ULL },
            { L_,  308, 0xb56d16808c75ecadULL, 0x1174b16a81317ec0ULL },
            { L_,  309, 0xc1eb06ebd3174ff0ULL, 0x63573024b51ca2b2ULL },
            { L_,  310, 0x75e3d2a02e082f70ULL, 0x1dcc63d1f3d6091fULL },
            { L_,  311, 0xed09fdb3c51a6e71ULL, 0xd86109df209b0a71ULL },
            { L_,  312, 0xa196638fe449cb88ULL, 0xd24b1a5aeb7846cfULL },
            { L_,  313, 0x7d898aee4c9846fcULL, 0xa7813c7f9648ae58ULL },
            { L_,  314, 0xe74755aa04436f41ULL, 0x805b8f66eeb42aeeULL },
            { L_,  315, 0x7479890a7effbcaeULL, 0x35984f8197182db7ULL },
            { L_,  316, 0x762e97369e926c00ULL, 0x9b7f332e3a180ea7ULL },
            { L_,  317, 0x402196ccaa55fca8ULL, 0x748cada6e6a0a4ceULL },
            { L_,  318, 0x3e714667763521c5ULL, 0x5dcb4c656a110994ULL },
            { L_,  319, 0xa2c56ff55dcaf2e2ULL, 0xb23b46fbf088ba17ULL },
            { L_,  320, 0x04328301ee0d6e5eULL, 0x5a398918f5f93badULL },
            { L_,  321, 0xa99ba31ad021d581ULL, 0x266e638097b7eaeaULL },
            { L_,  322, 0x8187de9c606520e4ULL, 0xbc0f279bb7890aa8ULL },
            { L_,  323, 0x85fb963b9af992f4ULL, 0xcb6a68c5cdf9416eULL },
            { L_,  324, 0x540adece8b4a6a1fULL, 0x6d3b83cb74d075d1ULL },
            { L_,  325, 0x165e1930b7d41f1dULL, 0x7e12b7062adae315ULL },
            { L_,  326, 0xf6b450d37b7037e3ULL, 0xb9a2aace673fc4f4ULL },
            { L_,  327, 0x1018016b535ae274ULL, 0x58a161e1f5150d61ULL },
            { L_,  328, 0x8ddf68b430995bf5ULL, 0xe71a88fe864aedf9ULL },
            { L_,  329, 0x1b64617e9705dae7ULL, 0xd217fd239ba5569bULL },
            { L_,  330, 0x734ad7de14d4aaaeULL, 0xd1aeb63ac5fad733ULL },
            { L_,  331, 0xdbd37e3b6ca520d5ULL, 0x2ed0aeaa0da773feULL },
            { L_,  332, 0xa174884eb9d1f66aULL, 0x682bfa032a400674ULL },
            { L_,  333, 0x871d07fc23cc0af9ULL, 0x0ade7db7bf20fc12ULL },
            { L_,  334, 0x9b2c87507faa930bULL, 0x35bc8f040f15742fULL },
            { L_,  335, 0xc8edfcbe549aacc6ULL, 0x92a4770d6e95dc55ULL },
            { L_,  336, 0x710b9296f04928e7ULL, 0xf32b9fc216dae343ULL },
            { L_,  337, 0x85a5e2572e68efe7ULL, 0xec066174d775ae52ULL },
            { L_,  338, 0xfb5c112a82c72700ULL, 0x8f4fe76f4b1a2e92ULL },
            { L_,  339, 0xdc6f8d8bb89b5fe9ULL, 0xce62718c2f894ce9ULL },
            { L_,  340, 0xed4f0d2b8bf9e483ULL, 0x7818c57e19bc4b69ULL },
            { L_,  341, 0x8ce36fb18a58598fULL, 0x3625bc61604aa555ULL },
            { L_,  342, 0xa18486d1e56ac88eULL, 0x4d119c6d26a5eb01ULL },
            { L_,  343, 0x1283b6e2af882f7fULL, 0xd5de02f2d78ad48fULL },
            { L_,  344, 0x02651c7589ddfe29ULL, 0x959b7b4984a6ad9cULL },
            { L_,  345, 0x85d4ef5be8b4a506ULL, 0x25c8425411b59545ULL },
            { L_,  346, 0xfd34e1d305e5ed11ULL, 0xca74238ee98265d3ULL },
            { L_,  347, 0x06d555f7a60073bcULL, 0xc150592f0d3ccbacULL },
            { L_,  348, 0x224170e2f9d7398bULL, 0x167b5a37d4dda5f0ULL },
            { L_,  349, 0x4a78551c7635ec70ULL, 0x2596e81f9d0b6e21ULL },
            { L_,  350, 0xc3deb8930dbf86d7ULL, 0xb07c4d1dbd4a7d51ULL },
            { L_,  351, 0xcde0288b02ddfc7eULL, 0x4bf1dfd34851d4a8ULL },
            { L_,  352, 0x93e2e3932bd6a833ULL, 0xf872b341da7acb81ULL },
            { L_,  353, 0x490cb8e8d9964e6fULL, 0xeb55e9936544fbd3ULL },
            { L_,  354, 0x19f084b531d2988cULL, 0x077eedf4737800aeULL },
            { L_,  355, 0xd63513316cfeb961ULL, 0xb6d3dbbc6a46d55eULL },
            { L_,  356, 0xb7e28d9d407407fdULL, 0x565f463533751572ULL },
            { L_,  357, 0x5c9365637875141aULL, 0xdbdacfb6a9320a0fULL },
            { L_,  358, 0x2598abb3cbe24cdfULL, 0x836a792fbbb8097aULL },
            { L_,  359, 0x590a32bb9ba34158ULL, 0x2517972ed0efd684ULL },
            { L_,  360, 0x8e151325b0d3fbcfULL, 0xbb643f43a9a9ccf9ULL },
            { L_,  361, 0xaff4cc9e8fa922abULL, 0x3178b1b2bc97d9d0ULL },
            { L_,  362, 0x65ffa84525787866ULL, 0x9d013d53cb10a690ULL },
            { L_,  363, 0x90e4cb943540cb1bULL, 0x01f3cc2815a0f7a1ULL },
            { L_,  364, 0x313098e54c4811f4ULL, 0x81e6318346558d97ULL },
            { L_,  365, 0x281341ec7e109f33ULL, 0x4b4b41b57533434aULL },
            { L_,  366, 0xdb231d92a89d305fULL, 0x62267d08f57a9760ULL },
            { L_,  367, 0x25e373d59284c151ULL, 0x3ea9faad5286d696ULL },
            { L_,  368, 0x0c74ccf320ec95cfULL, 0xf995d66f722a6fa4ULL },
            { L_,  369, 0x4bfc6ef0f7c370f1ULL, 0x353d548358a6bcc4ULL },
            { L_,  370, 0x45b3f0487f7ff847ULL, 0xa89d21c390bb19c9ULL },
            { L_,  371, 0x557721d2d392c857ULL, 0x210293b79162c492ULL },
            { L_,  372, 0x578717eba0aec30dULL, 0x8e6d9dd90dd43f76ULL },
            { L_,  373, 0x2d51cd8403e2e4d5ULL, 0x31492b3c62340e81ULL },
            { L_,  374, 0x64700c8076f9e7b6ULL, 0x3b7f44b0484de589ULL },
            { L_,  375, 0x9a6ba5f95c15909aULL, 0x6b9c219d1bfd55eeULL },
            { L_,  376, 0x82991838ed9cc488ULL, 0x011828e6140b766cULL },
            { L_,  377, 0x3a478c4e6da7d92fULL, 0x4ebe20141aeaa57bULL },
            { L_,  378, 0xde9c0b801b31461aULL, 0x60a457854d0511faULL },
            { L_,  379, 0x492b8792723224f5ULL, 0x004f1dc9779f777cULL },
            { L_,  380, 0x5861ab4c4602af1aULL, 0x2802ead9b8bae91fULL },
            { L_,  381, 0xa2a271a9d0c51262ULL, 0x552937f34bdb0676ULL },
            { L_,  382, 0x45f52b23421755fdULL, 0x12ff961d4b48c4b3ULL },
            { L_,  383, 0x1b589f561327bf5dULL, 0x36d85092ec536ff7ULL },
            { L_,  384, 0x5fec43af3814ef55ULL, 0xed13619799f73fd1ULL },
            { L_,  385, 0x5e35c948a73a722aULL, 0x78af1ed1491fb5ddULL },
            { L_,  386, 0x1abe4d4653bdb6afULL, 0xc9c90e90831416d5ULL },
            { L_,  387, 0x02893bea27b92ed4ULL, 0xcc6f0ef1f1240174ULL },
            { L_,  388, 0x05a9f1e7fa423c68ULL, 0xcca80ae5925af80aULL },
            { L_,  389, 0x548421b35527784cULL, 0xa543519c93b6e11bULL },
            { L_,  390, 0x48b18f4903771819ULL, 0x50b3c072f919bbd7ULL },
            { L_,  391, 0x525bbe5da8a87f3bULL, 0x820934c5f3736879ULL },
            { L_,  392, 0x95e8d30394f587b1ULL, 0xcdf8db2f3583490aULL },
            { L_,  393, 0x2bc8fdfb3a841d26ULL, 0xd47bd6dfdafe6b4bULL },
            { L_,  394, 0xa4abb9081c5550f0ULL, 0x0eaff5e73224e231ULL },
            { L_,  395, 0xb3e8a69057f4951aULL, 0xea4c08da877d56b4ULL },
            { L_,  396, 0xd682d94c6b420717ULL, 0xb25c0c9b0c5f077fULL },
            { L_,  397, 0x00b1aca5364090afULL, 0x6a3478568a92d8e3ULL },
            { L_,  398, 0xee801ff7830fdc1aULL, 0x035e651f18eefc1cULL },
            { L_,  399, 0x3e490fb78627120bULL, 0x4873fd396cb07f31ULL },
            { L_,  400, 0x7e94e4b363c2bf6bULL, 0xa295bd5d4fa00ea1ULL },
            { L_,  401, 0xf8aa1f541347f8d4ULL, 0xdced8e2516a0eb06ULL },
            { L_,  402, 0x4e3c189821e8460fULL, 0x3e8843b61f6d9ff8ULL },
            { L_,  403, 0x0a0a0e14bb9a3adcULL, 0x2b2d3072e2227f6fULL },
            { L_,  404, 0x068299fa02339b68ULL, 0x0ee5e9590096eb74ULL },
            { L_,  405, 0x179358289fdc9a11ULL, 0x85e64b3e4968778dULL },
            { L_,  406, 0x19d72ccdb7a6d314ULL, 0x256cc6e902aab3f7ULL },
            { L_,  407, 0x246d896ae9e72588ULL, 0x2d2b3ad4c80453adULL },
            { L_,  408, 0x84d1c85e4e7b949fULL, 0x007b55da1016c01aULL },
            { L_,  409, 0x48ef0cc45935d49bULL, 0x5051b10445a3242dULL },
            { L_,  410, 0x9bf1e3ac05bac8cbULL, 0xd505d1e94f67e619ULL },
            { L_,  411, 0x5cb671cb6d61f4b7ULL, 0x03dd8af6c66ea9f3ULL },
            { L_,  412, 0x8da21f333b0755b5ULL, 0xf58b19925577cc80ULL },
            { L_,  413, 0x7678f5eec3a5a7e9ULL, 0xb3ff17c1d4c5e5a2ULL },
            { L_,  414, 0x46b1279e4a4202feULL, 0xea488cb3767200c7ULL },
            { L_,  415, 0x60e9231531e349b0ULL, 0xcb0ca233fede53adULL },
            { L_,  416, 0x6dc905a17d75b854ULL, 0xb66418ff200e7370ULL },
            { L_,  417, 0xe93639287996925dULL, 0x2b58581b793bd417ULL },
            { L_,  418, 0x8460cec104700163ULL, 0x8b04a05260d33213ULL },
            { L_,  419, 0x4ffcb94e72c4f20dULL, 0x39dd7e09765f40f8ULL },
            { L_,  420, 0x200af74c492bda0aULL, 0x2020feabf50d24a8ULL },
            { L_,  421, 0x44dbcbc10a5935daULL, 0x5a68c86277719a4dULL },
            { L_,  422, 0x0afa9db2ee63049eULL, 0xd61fb06a1609c13cULL },
            { L_,  423, 0xf1fc42d0434371ffULL, 0x51b554bc4c811ec7ULL },
            { L_,  424, 0x194d0b5d14512446ULL, 0x1eb10aa1cfad3f2fULL },
            { L_,  425, 0x4a8ab9cc979a53a8ULL, 0x77324bfc35909593ULL },
            { L_,  426, 0xbf7a8a9aae690dbbULL, 0x1635e24c08a3f726ULL },
            { L_,  427, 0x0d87e21d23f06cbfULL, 0xc2f14e658ea2abd2ULL },
            { L_,  428, 0x0322d690330dc26dULL, 0x63887022e13e106aULL },
            { L_,  429, 0xf664b6420eca7033ULL, 0x6a9b113a71c912eaULL },
            { L_,  430, 0xacdffed6d78bcd48ULL, 0xe26b40b70f5276e3ULL },
            { L_,  431, 0xd91c112896901e5fULL, 0xac61364df6b4195dULL },
            { L_,  432, 0xd474764613000115ULL, 0xea41f2bd1949e9a5ULL },
            { L_,  433, 0x28fc6dda4e4c4971ULL, 0x67f863a3a093ce5aULL },
            { L_,  434, 0x49bf37ed622437bcULL, 0xf181714e2ab87664ULL },
            { L_,  435, 0x468a3a255c8b500dULL, 0xaf7712c209769828ULL },
            { L_,  436, 0x26b5d2679ac89d63ULL, 0xdd87505b222095b0ULL },
            { L_,  437, 0x78f976b9fe399f8dULL, 0x55c7e79e695db54eULL },
            { L_,  438, 0x7dbbdfb0a686943aULL, 0x7ab62de5b1a6c3e1ULL },
            { L_,  439, 0xe8707228fd5ecd10ULL, 0x408ab9950a877b99ULL },
            { L_,  440, 0x4e3231381bfc2620ULL, 0xf20bfb2cb766f944ULL },
            { L_,  441, 0x4ee16f795ae946f5ULL, 0xc6857ef85af9cc67ULL },
            { L_,  442, 0x75e960ce2509c920ULL, 0xc18bb50336efffe4ULL },
            { L_,  443, 0x7f2177ca7ee30cc3ULL, 0x8af753da9990ddacULL },
            { L_,  444, 0xcb2d153bc328b4eaULL, 0x5519924a8c10b124ULL },
            { L_,  445, 0x57df8d9c05f27e79ULL, 0x0608dc975c466e78ULL },
            { L_,  446, 0xb18f2a6ce5b30495ULL, 0xb2be4de7aee15cc8ULL },
            { L_,  447, 0x11bca132a9b1cc88ULL, 0xd1212099f2e773bbULL },
            { L_,  448, 0xac32d29d43a88ec1ULL, 0xf0c8ef39a36157b1ULL },
            { L_,  449, 0x06f5f203859c003bULL, 0x6c394eb1a8d24cf8ULL },
            { L_,  450, 0xed6e1561596bf029ULL, 0x7a394e1c395c8b5dULL },
            { L_,  451, 0x54267b43aee4ff37ULL, 0x2eec9ddf3f883594ULL },
            { L_,  452, 0x41f18cea5eb6a80fULL, 0xc458d56fbd6b2a11ULL },
            { L_,  453, 0x38cf403534397e85ULL, 0x1d34e53d4024d6e1ULL },
            { L_,  454, 0x42ecfe7bca176b9bULL, 0xbaec6722ad671c31ULL },
            { L_,  455, 0x32d5bd25a69c3c55ULL, 0xf4fa84d6ee62ccb1ULL },
            { L_,  456, 0xda9b2bf3333f4f30ULL, 0x399d15581d26f142ULL },
            { L_,  457, 0xda90abad7ef6c61cULL, 0xcfbcef9ff4cb8180ULL },
            { L_,  458, 0x63cbd4a601138596ULL, 0x486d4ec5bd3c9b90ULL },
            { L_,  459, 0x77d7819590fb9d54ULL, 0x5bbc0a449b995bc1ULL },
            { L_,  460, 0xd202118c2faec3d3ULL, 0x6f937e011a6bde33ULL },
            { L_,  461, 0x7ec6fa6fc185be55ULL, 0x21f7305cba64c8f4ULL },
            { L_,  462, 0xa8bb7e5030db4897ULL, 0xe3dd5572d84841c2ULL },
            { L_,  463, 0xdf7b08253e0b4a7bULL, 0x6025cc31087e8b34ULL },
            { L_,  464, 0xbf00ee50599b72bfULL, 0xf96c047d82838b85ULL },
            { L_,  465, 0x3c700fb9cc7e9c30ULL, 0xcb3fe351983e6834ULL },
            { L_,  466, 0x1340743fe23aa9cfULL, 0xb971252a66e6b1e2ULL },
            { L_,  467, 0xe432e9b47594b514ULL, 0x099eb18fbab788e8ULL },
            { L_,  468, 0xc27d6203ea21d51eULL, 0xcd3535bd0f1219a2ULL },
            { L_,  469, 0xca7f289bff3ea0c8ULL, 0x83b333c5d3623c36ULL },
            { L_,  470, 0x0c0bf8156b21d5e0ULL, 0x13a865d7ac2dd812ULL },
            { L_,  471, 0x2651ded0f3800765ULL, 0x7fc1593bb38fb7b7ULL },
            { L_,  472, 0xd60f58501ea3b8f1ULL, 0xfff87cbcdf1ff56dULL },
            { L_,  473, 0xb058821ccf57791dULL, 0xd221758db769ff94ULL },
            { L_,  474, 0xce2a13acb5e6c26fULL, 0xdb83802ecfafa292ULL },
            { L_,  475, 0xd9fa519a57ea2e88ULL, 0x4ebc38612d675fccULL },
            { L_,  476, 0xa31f627cd6e695edULL, 0x3aec3c47514e1a24ULL },
            { L_,  477, 0xc926951673134b05ULL, 0xf8f4a3b61cf5c140ULL },
            { L_,  478, 0xecc70fd221cbe646ULL, 0xc267e70a5ebdba5bULL },
            { L_,  479, 0x252197cdf04ee0c2ULL, 0x7a2b6dfa5219d24eULL },
            { L_,  480, 0x013ca3d4734fbaafULL, 0xbc27811dd90da2cbULL },
            { L_,  481, 0x659abaaab2d5cf20ULL, 0x61164c11fdf46e4dULL },
            { L_,  482, 0xa97ed822c9df6315ULL, 0xec957756f38f4833ULL },
            { L_,  483, 0x0b3b7ee50c7e3fa4ULL, 0x33706c23cc9952c1ULL },
            { L_,  484, 0x3460b2368a05039eULL, 0x2dbfca1a7d89d0ecULL },
            { L_,  485, 0xe88f51e080ff569aULL, 0x5e5e062c063bafa5ULL },
            { L_,  486, 0x373bd6b4b0ffd795ULL, 0x5a47fbd849383f2eULL },
            { L_,  487, 0xb5551caed3e96fbbULL, 0xcb215da6171c6830ULL },
            { L_,  488, 0x3cc568eaa8861b34ULL, 0xf0327ae6091c4e53ULL },
            { L_,  489, 0xa8092769f4c9373dULL, 0x3d7e35764490367bULL },
            { L_,  490, 0xfd0df78402f57d26ULL, 0x6140640fe21e7022ULL },
            { L_,  491, 0xc4d8b32c121e191cULL, 0x4d2311bd1d9964bfULL },
            { L_,  492, 0xce94937d6b0c4ab5ULL, 0xc7146dd6364eb3a7ULL },
            { L_,  493, 0x972648c5cb337b78ULL, 0x5e896e4a4e609beaULL },
            { L_,  494, 0x6a0ff26271a7fa1cULL, 0x126292637ebed2d2ULL },
            { L_,  495, 0x0b8393ef72989c3cULL, 0x0a3e3ae16ef0b8aaULL },
            { L_,  496, 0x4d6bce9e290a4a35ULL, 0xd61df5c1b28855e3ULL },
            { L_,  497, 0x9fb06a437db74f7fULL, 0xcf3406423087b9c5ULL },
            { L_,  498, 0x20fa1c9d56d7b131ULL, 0x490c65aa6ab46cb0ULL },
            { L_,  499, 0x9b1ddc90f382c4a2ULL, 0xb0fed8e86467c1dfULL },
            { L_,  500, 0x44b7ee86385d42aeULL, 0x7fbbe042a3a1d5ecULL },
            { L_,  501, 0x05dabda6342389b0ULL, 0x04dd2a3a15ada0bdULL },
            { L_,  502, 0x21faa53a8eb409b0ULL, 0x708fe27072260a14ULL },
            { L_,  503, 0xd1a31c743ba7398aULL, 0x220a5cd04dcb3185ULL },
            { L_,  504, 0x6411ed46d084dce9ULL, 0xb79ee17d9504392cULL },
            { L_,  505, 0xa9df770616816be8ULL, 0xe8246134ca9990a4ULL },
            { L_,  506, 0x3e8a81111ee5c716ULL, 0x7b2371193aaf0912ULL },
            { L_,  507, 0xe3c7260962e33252ULL, 0x65dfc403deaed53fULL },
            { L_,  508, 0x58fb0f56fb4bdfd9ULL, 0x7cb927356f540581ULL },
            { L_,  509, 0xd183efa5a1bd160bULL, 0x58321963b89662aaULL },
            { L_,  510, 0x912cca1998686b0dULL, 0x86c73485ee7eea59ULL },
            { L_,  511, 0x28c3ea287282d5b0ULL, 0x0dbfe4e65b57a01dULL },
            { L_,  512, 0x532f708a723438fcULL, 0xe5412954fefccc9cULL },
            { L_,  513, 0xa89d2f561af74bfeULL, 0xcdc50c2f41920bafULL },
            { L_,  514, 0xa63a902113cf27a3ULL, 0xaa8ae02749d4e6ecULL },
            { L_,  515, 0xcfedfbe468637fb4ULL, 0x38039c336c75fb36ULL },
            { L_,  516, 0x0f474497c47eda1eULL, 0x635a80c3fdb52301ULL },
            { L_,  517, 0x77df74128d5701d9ULL, 0x0b0aa47f672c0e00ULL },
            { L_,  518, 0xf437d5f614e4fdeeULL, 0x00b2749f9829a0a4ULL },
            { L_,  519, 0xa9b62bd949c35bb8ULL, 0x909e27c26a19ebf1ULL },
            { L_,  520, 0x8a75c62bb4bb89d5ULL, 0xe88db82bbb07a874ULL },
            { L_,  521, 0x7e3dd140cae46a9aULL, 0x83f3e2931d63f37dULL },
            { L_,  522, 0xfd94d1a90eecef5fULL, 0x3f7b6f7993836d04ULL },
            { L_,  523, 0x7699f3c182c6e408ULL, 0x41f713ed3495a82fULL },
            { L_,  524, 0x04f6e30821460ea1ULL, 0x90fd38cd0b9548e1ULL },
            { L_,  525, 0x525548ec90de1acfULL, 0x9f9d0e760882f3c1ULL },
            { L_,  526, 0xa8551fac8aa7e597ULL, 0xcf19779d3a122fabULL },
            { L_,  527, 0xe78f78ec9c804967ULL, 0xb264dc4eb1b18ce3ULL },
            { L_,  528, 0x4272571f63f15198ULL, 0x412141dfc0e69143ULL },
            { L_,  529, 0x76d87ad8f9015069ULL, 0x943d2e4c79e1ef6eULL },
            { L_,  530, 0xefe18243e0b1019dULL, 0x06d4668e614ba1b2ULL },
            { L_,  531, 0x279dac8607305772ULL, 0x3112c9e7f390f1b9ULL },
            { L_,  532, 0x46a2be80e62eb24cULL, 0x02ae120e67655ce1ULL },
            { L_,  533, 0xcff1a61a6eabbfc7ULL, 0xa46a5e3a7c0c587fULL },
            { L_,  534, 0x7fcf26d6500dd9e6ULL, 0x933ad3fc708c7870ULL },
            { L_,  535, 0x25298dd911cbd18cULL, 0xec845c6b74693a12ULL },
            { L_,  536, 0xcd36a7db33883604ULL, 0x7d0016b2d4a8c125ULL },
            { L_,  537, 0x3e3e72cfc19b1ea3ULL, 0x2541a77d7e6816f1ULL },
            { L_,  538, 0x3c1bc4a6bda165a5ULL, 0x3c3f4d0958e05fa7ULL },
            { L_,  539, 0x24902398dc5d5a2cULL, 0x984d554b721f5672ULL },
            { L_,  540, 0xa17ef185c2b282bfULL, 0x87ccb018d8fc4708ULL },
            { L_,  541, 0x62af3d7fefaed2a9ULL, 0xe65472c3d87a16c8ULL },
            { L_,  542, 0x4f28a597858e6ca1ULL, 0xa5d2c0fd53f98479ULL },
            { L_,  543, 0x7a99a49d8f7ea45bULL, 0x91472a8ddc8ac5e7ULL },
            { L_,  544, 0x2bf8e033932b1d63ULL, 0xdca749ac76dd92c0ULL },
            { L_,  545, 0xa40d72fceac85f70ULL, 0x0acd68a2ad873b7cULL },
            { L_,  546, 0x70d47061360f394cULL, 0x8ffceed6658b5b60ULL },
            { L_,  547, 0x372782fb75f1db24ULL, 0x2f596d2f46042f38ULL },
            { L_,  548, 0xc93c16de86fb5aa7ULL, 0x323ead46fe157fa5ULL },
            { L_,  549, 0x172a3bec320baf5aULL, 0xe1d9b30c06e38401ULL },
            { L_,  550, 0x4def3a8c05b4f274ULL, 0x50652ded67fb290eULL },
            { L_,  551, 0x35c0c0f8582bfc59ULL, 0xbedc0e927c3462a5ULL },
            { L_,  552, 0x499d7a093875eb7bULL, 0x737ec901feb4d112ULL },
            { L_,  553, 0x2a5897439d0766dcULL, 0x16c27eeb1dc3642dULL },
            { L_,  554, 0x947e3cc40a40a7edULL, 0x8dfa330fc4d0d0afULL },
            { L_,  555, 0xc2d1d34082306551ULL, 0x9baa91f8a141174cULL },
            { L_,  556, 0xa76a14004a681317ULL, 0xb1e58d626ef84ed7ULL },
            { L_,  557, 0x419be7a5ac122bffULL, 0x21455cd75a6f62d0ULL },
            { L_,  558, 0x360352fb9ca43323ULL, 0xca333f59ddd18e70ULL },
            { L_,  559, 0x67ea7bc0a1e6497cULL, 0x80c2f9573a841955ULL },
            { L_,  560, 0x90349ac7cf431ddbULL, 0xcd7c0bbe07aae93eULL },
            { L_,  561, 0xfed1a12f8eefce29ULL, 0xd27ee5f3572ab18fULL },
            { L_,  562, 0xe29109a986b1464aULL, 0x82f3b9af09c43633ULL },
            { L_,  563, 0x1c80f1708e63ff5dULL, 0x7357b496abc33e23ULL },
            { L_,  564, 0x72e307c5198b1f2fULL, 0x5ca9a87950c7aac9ULL },
            { L_,  565, 0xe089bc5e708f01f7ULL, 0x5856ea550d70e494ULL },
            { L_,  566, 0xd1c636f19267af6bULL, 0x46913a93277939d0ULL },
            { L_,  567, 0xc7ee7e0be730969bULL, 0xadb5ec997962d7b4ULL },
            { L_,  568, 0x5974a3638f6fba37ULL, 0xf08018a6d40c660dULL },
            { L_,  569, 0xaffed061bb708a6aULL, 0x32afb1d018a2170aULL },
            { L_,  570, 0x4337aa16d86c53d0ULL, 0x971b900c2869b068ULL },
            { L_,  571, 0xce07f1f4c4dcc39dULL, 0x288044a3fc415d68ULL },
            { L_,  572, 0xb23532a020d04e4dULL, 0xb8f91fd2877d9d9bULL },
            { L_,  573, 0xf9a9061ce9770712ULL, 0x02c4424aa26c4129ULL },
            { L_,  574, 0x431a297ad8a06bd6ULL, 0xfec740b6b42af1d6ULL },
            { L_,  575, 0xc2656009b190bab6ULL, 0xd967851603a831aaULL },
            { L_,  576, 0x3bb201ca80668d07ULL, 0x7f7fefca8479c29bULL },
            { L_,  577, 0xd1d89917b13188c0ULL, 0xb098d75bf618bb5cULL },
            { L_,  578, 0xb6d41fba57215047ULL, 0x0036fcb2d3bc1a85ULL },
            { L_,  579, 0xfb9f201674de492aULL, 0xac09ffdda9eee845ULL },
            { L_,  580, 0x26306fa735fbcb9dULL, 0x6686c590930b2d13ULL },
            { L_,  581, 0xa5054984a155bbfdULL, 0x599a5a8dc4a6e708ULL },
            { L_,  582, 0x0d1879816c7fd0f8ULL, 0x72d9f519159b2dc1ULL },
            { L_,  583, 0x8ff974b1a9a5be6eULL, 0x0a5fece59437881aULL },
            { L_,  584, 0xcf5e07c424b4ab7cULL, 0xcc35402d4f5baa35ULL },
            { L_,  585, 0xcf5ce35ed8277780ULL, 0xe0f870c470f9f0acULL },
            { L_,  586, 0x22917dcffab1f9b5ULL, 0x67ef8934abb25169ULL },
            { L_,  587, 0xb60f6b48d7b3d1d5ULL, 0x4d80d727ef36d656ULL },
            { L_,  588, 0x0b1d49655eff6516ULL, 0xffd01a7fc9cb33bcULL },
            { L_,  589, 0xc9a26ffe2b83e65dULL, 0xbfcdaa9d89861ea2ULL },
            { L_,  590, 0xe8549090ee02a1ffULL, 0x5f15b923f1b8dcc8ULL },
            { L_,  591, 0xe15fc5a37cc39145ULL, 0xfd5758be67fd7ec7ULL },
            { L_,  592, 0xca5fa108dcc559ddULL, 0x08c177b099b5621eULL },
            { L_,  593, 0x4c93908feba1e96fULL, 0x2508096e4d832359ULL },
            { L_,  594, 0xc23e0150eb12549dULL, 0xde32600777a6560eULL },
            { L_,  595, 0x0bb14746bd65e863ULL, 0x0dbee7a9b1f4dcf8ULL },
            { L_,  596, 0xd6e2aab0502ed855ULL, 0x6b61a289717ec612ULL },
            { L_,  597, 0x3527589053b88e91ULL, 0x4eb37dcda4cdcaf7ULL },
            { L_,  598, 0xee59f27956ab1acbULL, 0xccdbc7eb4e6653bdULL },
            { L_,  599, 0xe5b8494755c2e94fULL, 0x545e3bfb2771c7d8ULL },
            { L_,  600, 0x605e945725804d6eULL, 0xbe556a1f8f2f816cULL },
            { L_,  601, 0x05b67b2502431ef2ULL, 0x8e72fc2dfd9e5896ULL },
            { L_,  602, 0xa483e0fe619d0d31ULL, 0xd7bc0cfb2d84a435ULL },
            { L_,  603, 0x46e989782b4cfadfULL, 0xf4f9916545b5589fULL },
            { L_,  604, 0xe61db4c4a246ee7eULL, 0x4f821b946abfc927ULL },
            { L_,  605, 0x028303bf78c6dd3cULL, 0x68209c10f64ce381ULL },
            { L_,  606, 0x41952fa4420d8eadULL, 0xae5b39b6d20f6ef4ULL },
            { L_,  607, 0x71f813b131f760f0ULL, 0x945c4b4498bc9c2fULL },
            { L_,  608, 0xf30fe18eaa37b00aULL, 0x39220804fb821881ULL },
            { L_,  609, 0x552df59eaf0799d2ULL, 0x85c16d5a146a5832ULL },
            { L_,  610, 0x7765c40deb27ec0bULL, 0x3dfbca09fe068154ULL },
            { L_,  611, 0xe4ee01b02746bcaaULL, 0xafa38e0094b6ca04ULL },
            { L_,  612, 0x9f06acd0f2009025ULL, 0xfc7a852fae5084d2ULL },
            { L_,  613, 0xe2820ceebb362949ULL, 0x24e18aa3125bdb6fULL },
            { L_,  614, 0xacb8b6036d0fe80fULL, 0x6b6683c05b7c4983ULL },
            { L_,  615, 0x51482d483a044a9cULL, 0xcf74fcf5525cf128ULL },
            { L_,  616, 0x52e93b6ee8168b0aULL, 0x726ed7e9f16966ccULL },
            { L_,  617, 0xe9e8ce14fd8a51b6ULL, 0x775c7c7b92b70cbeULL },
            { L_,  618, 0xba83e42d7a5a4156ULL, 0x118d6fcb9b383c67ULL },
            { L_,  619, 0xff1c8a9e93bb82ebULL, 0x3b2880ddedfa0581ULL },
            { L_,  620, 0xbb3d9e9567615ae2ULL, 0x5f079d9d9d4b13c0ULL },
            { L_,  621, 0xaca5a42065950e10ULL, 0xf51affaf3b17bb59ULL },
            { L_,  622, 0xb716a04b2c037874ULL, 0xf0ad79de85191337ULL },
            { L_,  623, 0x344b797e129758d4ULL, 0x7c5f5de9317f694aULL },
            { L_,  624, 0x4336cdeaabc55a8dULL, 0xd4494eb99a9750acULL },
            { L_,  625, 0x1ef812116f5ed0f9ULL, 0xc440bfea5675b20bULL },
            { L_,  626, 0x674fcf97164daca4ULL, 0x82cad4cc714c6366ULL },
            { L_,  627, 0xeace046662e3da3dULL, 0x8374d1f498a5fbf1ULL },
            { L_,  628, 0x59f0d08df124afd0ULL, 0x1db361d40869d4dcULL },
            { L_,  629, 0x87e688bb2561fe7eULL, 0x0e0265d0ceb5def9ULL },
            { L_,  630, 0x5a6cf503e76d5df5ULL, 0x0f57a7aba084d6feULL },
            { L_,  631, 0x935e57ae087a0ba8ULL, 0x9835df3234a554a8ULL },
            { L_,  632, 0x1b3f7fca5515ee41ULL, 0xd7a4ccacc4521b41ULL },
            { L_,  633, 0xe5277a1cd564f45fULL, 0xe8a4d3ad39463fb4ULL },
            { L_,  634, 0x57ce37e5db7a8fefULL, 0xe62f84eb6f38c16aULL },
            { L_,  635, 0x188fd0f2fab6aa0cULL, 0x3179fabaa16c803eULL },
            { L_,  636, 0x044a4c8e8372cae1ULL, 0x817394a238552e71ULL },
            { L_,  637, 0x086abd18bf38e030ULL, 0xcc1992ef8c7137ccULL },
            { L_,  638, 0xd3c295a89790cd3eULL, 0xd3330809472fbb36ULL },
            { L_,  639, 0xfe3e476a688c193bULL, 0x0f6389bfbbd95f60ULL },
            { L_,  640, 0x84b70689125ab4f9ULL, 0xef5ff43838487e82ULL },
            { L_,  641, 0x8bc2381bb4dabcd0ULL, 0x7529fef04da87bf3ULL },
            { L_,  642, 0x0f4d13da5a85e628ULL, 0xb62b8f0020338e3dULL },
            { L_,  643, 0x7e3a433e7a60d3fcULL, 0x85c0f4d2ba4d6f7bULL },
            { L_,  644, 0x1ed63aedf0824709ULL, 0x71b3370455153947ULL },
            { L_,  645, 0x8d3ff2965ddf9df7ULL, 0xb9efc17e8ea9b5a1ULL },
            { L_,  646, 0x8db03b5df023a486ULL, 0x6062d89db88e640bULL },
            { L_,  647, 0x37fc26a28d03e5f9ULL, 0x26be53712d2b4344ULL },
            { L_,  648, 0x22a0d90f0338f4fcULL, 0xc57cfd65852895ebULL },
            { L_,  649, 0x6ca080e705338104ULL, 0x91c678b2b0d83b45ULL },
            { L_,  650, 0x1c95362499addb91ULL, 0x4902316d3331036bULL },
            { L_,  651, 0x5eab562f416cc818ULL, 0x87b4bf1871adebdbULL },
            { L_,  652, 0xcd8e82864e05f7e6ULL, 0xc2eea70908294e90ULL },
            { L_,  653, 0x05fc68c3d65b17cbULL, 0x980fba895f0a4a54ULL },
            { L_,  654, 0xdfd7a843b1b95a57ULL, 0x78e4b47b9b481fedULL },
            { L_,  655, 0x9c5087171f2644acULL, 0xc06dd8bb79464784ULL },
            { L_,  656, 0x5b906238570a4d3cULL, 0x42bef36d476ebeaaULL },
            { L_,  657, 0x67aa04987a9fda7fULL, 0x29b270f99e342863ULL },
            { L_,  658, 0xbbf602fe3d270cabULL, 0xf29b6d5c7be90fb6ULL },
            { L_,  659, 0x05db5007246c79a0ULL, 0xf0f3806e42df5810ULL },
            { L_,  660, 0xb6dc092e2577df96ULL, 0xc43ad62079971052ULL },
            { L_,  661, 0xe71ffaacaade1973ULL, 0x6b317f95b95018e4ULL },
            { L_,  662, 0x941d253644ba190bULL, 0x2616508706a8e577ULL },
            { L_,  663, 0x4466123ddf9766d6ULL, 0x2de3b2ede386daf5ULL },
            { L_,  664, 0xa66d39e126da1e3dULL, 0x1457ba6b5cabf8e3ULL },
            { L_,  665, 0x8820be655584882cULL, 0x80d82b6394bcb44dULL },
            { L_,  666, 0xe44686ae3c395ac9ULL, 0x1757b7ac72851bdeULL },
            { L_,  667, 0xd33d031002bd785aULL, 0xf22604973f518a7aULL },
            { L_,  668, 0xb60bddf2dc28d918ULL, 0xa6d64a57ac8eda5bULL },
            { L_,  669, 0xcb4778ffd71b82acULL, 0x9d9827fcd2c590ebULL },
            { L_,  670, 0x6f6039d958a1561bULL, 0xd95e3eeb672980c5ULL },
            { L_,  671, 0x7cbb3dd2c4704a92ULL, 0xafa9027c867c736bULL },
            { L_,  672, 0x07a452811f387bf5ULL, 0x1efb05788a4cd302ULL },
            { L_,  673, 0x852d0045f414914eULL, 0xb255bfaae08b75d9ULL },
            { L_,  674, 0x0540073022a5cd18ULL, 0x1032d4fdde1c9242ULL },
            { L_,  675, 0x85f517f5da0b2e3dULL, 0x2d19f248a29aaf28ULL },
            { L_,  676, 0x0503d22db26f39f7ULL, 0xcf3f53e8ddeddc7cULL },
            { L_,  677, 0x311d0e1f8fe72cf8ULL, 0x6726655da3d57dbcULL },
            { L_,  678, 0x62c18840409f45a5ULL, 0xd3d503ddf571e018ULL },
            { L_,  679, 0x1b9df43d3adff750ULL, 0x5a5f968ca99c9bd9ULL },
            { L_,  680, 0x7302fb5aa59f0fabULL, 0x37901ec521d0e794ULL },
            { L_,  681, 0x19e22a1098050f41ULL, 0x7a9c2af9c0d37b36ULL },
            { L_,  682, 0x4064aa271993d95aULL, 0xee2dde859de035ddULL },
            { L_,  683, 0xf0d347fef525f04fULL, 0x1c68d3a9a0c77f68ULL },
            { L_,  684, 0x83e527097078c2a9ULL, 0x509563a20c507d8bULL },
            { L_,  685, 0x2486cf99525bfe89ULL, 0x1dc32a26afb7e6e1ULL },
            { L_,  686, 0x4f0e77c2f0727a06ULL, 0x2db3ffe8d8086852ULL },
            { L_,  687, 0xd97b12f7d99da92dULL, 0x20765c88648f1498ULL },
            { L_,  688, 0xfe9c45b3b4d65d61ULL, 0x9741eea720ec96e3ULL },
            { L_,  689, 0x5ab2c8d393000e8bULL, 0x9f2d48562d6e2310ULL },
            { L_,  690, 0xc5b42a40d977bb83ULL, 0xc5b23e7468d5b0e8ULL },
            { L_,  691, 0xa32867bd54ada36cULL, 0x6a63ef9c8a2a422bULL },
            { L_,  692, 0x75565591445680abULL, 0x742c332a79e89c5aULL },
            { L_,  693, 0x11eaf44fbfa8b7aeULL, 0x11d955a5f7b0b16cULL },
            { L_,  694, 0xc05d6ecab350fecfULL, 0xe8eb1c35a195d036ULL },
            { L_,  695, 0xf344b6af3a166116ULL, 0x69aa82be8761430bULL },
            { L_,  696, 0x8545837e9ab761e6ULL, 0x814cc5cd801ad4e9ULL },
            { L_,  697, 0xdd117313b4668793ULL, 0x38c551ef90e58806ULL },
            { L_,  698, 0x60ad38be26e3c979ULL, 0x3d05335e652279f5ULL },
            { L_,  699, 0xd4eec1a0294a27f6ULL, 0xe11581838138559bULL },
            { L_,  700, 0x24feff042ba12c07ULL, 0xd1ae740d1635e2aeULL },
            { L_,  701, 0x2b3af4d9a0740455ULL, 0xf83d890ab52cc111ULL },
            { L_,  702, 0x0b18c853bfaba8beULL, 0x86779421e8ff6877ULL },
            { L_,  703, 0xd033ac7e5ebc51baULL, 0x574e963e4704fdcdULL },
            { L_,  704, 0xa53edf88da44a4a7ULL, 0x3711ca8dccab7cf2ULL },
            { L_,  705, 0x605984d05634dc01ULL, 0x8f242eb0b1f22859ULL },
            { L_,  706, 0xe74bc33d4adfdc6bULL, 0xc06689cae4093280ULL },
            { L_,  707, 0x01b16fe8a7847b7dULL, 0x3048b4cfeda219c9ULL },
            { L_,  708, 0x7b9100a9537f813eULL, 0xd60391e393661b3fULL },
            { L_,  709, 0x475c42542d457c84ULL, 0xf4c584abcb098addULL },
            { L_,  710, 0x51fbdcea66b1a797ULL, 0x84d8b5eeddaba6d7ULL },
            { L_,  711, 0x488929a90c28bcd0ULL, 0x5263c789df3e101bULL },
            { L_,  712, 0x6b39bba0452391dbULL, 0x1b27f514f3e2e703ULL },
            { L_,  713, 0x7fe230b3d6cea796ULL, 0x9bd6452be921a1c7ULL },
            { L_,  714, 0xcdab90dd1af593beULL, 0xfaf2c98be3810266ULL },
            { L_,  715, 0x2ec0e6e8669734d8ULL, 0x233fa0a207fca64eULL },
            { L_,  716, 0xb5fdc2db4cc9e5d9ULL, 0x96bd8f2b72bf7e4eULL },
            { L_,  717, 0xaa9d4d25fb384cc0ULL, 0xdc2d8e487d96e28fULL },
            { L_,  718, 0x33d905b9fa309232ULL, 0x18f53c57bd592de3ULL },
            { L_,  719, 0x112d7c14fa85c856ULL, 0xf6f3efeca478a79bULL },
            { L_,  720, 0x5517b2b35c5772b7ULL, 0x19c51764888bf4caULL },
            { L_,  721, 0x6a4c1ff849a08b04ULL, 0x63efa9532a46ed5cULL },
            { L_,  722, 0xaaa553fbd17db082ULL, 0x1d0a41bf58006bdeULL },
            { L_,  723, 0xafc77f3890c51f15ULL, 0x38fe52223ec9f13dULL },
            { L_,  724, 0x5503d8a5a7e82a61ULL, 0x7f4a6ef3c03e2b67ULL },
            { L_,  725, 0x1fe51b8a24741b7bULL, 0xea75b248e0917213ULL },
            { L_,  726, 0xeb94bbf5de3d3846ULL, 0xbdf6a963da26c385ULL },
            { L_,  727, 0x9e272b3bb136a0e6ULL, 0x66f16c3a729b4530ULL },
            { L_,  728, 0x3d76b18550bce479ULL, 0xe2858e56ce1d1176ULL },
            { L_,  729, 0x5779b97ad1956562ULL, 0x914a6b37724ff056ULL },
            { L_,  730, 0x1fcefcb281ff6d00ULL, 0xec3fa6e7419bb892ULL },
            { L_,  731, 0x1a228874149fc17fULL, 0xdc36d07338cefdbeULL },
            { L_,  732, 0xdf93a639015b613aULL, 0x627a2a72163089b3ULL },
            { L_,  733, 0x40d078c29690e7f5ULL, 0xe9835df97c7443c6ULL },
            { L_,  734, 0xf7323e86a4e083d9ULL, 0xececc6ad5fae03d6ULL },
            { L_,  735, 0xb9d3c0865a99878aULL, 0x9e00619765792098ULL },
            { L_,  736, 0xfdfa75eacce7249dULL, 0x056c393714799f96ULL },
            { L_,  737, 0x280d2c155c232e6fULL, 0x88b2a94e53134410ULL },
            { L_,  738, 0x57b153019c1bf0daULL, 0xcd37b9b046102e0bULL },
            { L_,  739, 0xbc45b2dc61cdf1c0ULL, 0xec3cbf0c849b68d5ULL },
            { L_,  740, 0xc82ed437449e38f0ULL, 0x39f0fe840074204bULL },
            { L_,  741, 0xdfb9b90776f423a1ULL, 0x57c1564232894f47ULL },
            { L_,  742, 0xf2b6f049bf504492ULL, 0x90837a11111c53f2ULL },
            { L_,  743, 0xd91967a08fafb1a5ULL, 0xa12e91ea8ef6621fULL },
            { L_,  744, 0x81ec7474b1377eb1ULL, 0xeb75e8065b8a82ccULL },
            { L_,  745, 0x0cd65c47f9244148ULL, 0x0f6e5be397763cdeULL },
            { L_,  746, 0x12f9764dc2512910ULL, 0x770dfea65b165c8eULL },
            { L_,  747, 0x813c824cc1c3ff60ULL, 0x73d3a1ecccc9757dULL },
            { L_,  748, 0x703e5e14c292da3fULL, 0x8e87dec970c2dd8dULL },
            { L_,  749, 0x0d1bc323f88a6657ULL, 0xed96059d97c14979ULL },
            { L_,  750, 0x94c5368787c72dedULL, 0x709a9e258768f60cULL },
            { L_,  751, 0x0fbe367d44296401ULL, 0x78c6b9c69675d130ULL },
            { L_,  752, 0x758a0c45ea609514ULL, 0xe92e569570d752c2ULL },
            { L_,  753, 0x0dc62ae84bfc5854ULL, 0xd29c8faafa7f2d6bULL },
            { L_,  754, 0x56d9acc9d6b4f4a4ULL, 0xb4e5221891d0baa7ULL },
            { L_,  755, 0xac6457f86fade6bcULL, 0xe197b15cfe39bc47ULL },
            { L_,  756, 0xf346586bd43e464bULL, 0xe2b4d622af0f3a1eULL },
            { L_,  757, 0x4d368a0ae761b38dULL, 0x0d185d259cdd5590ULL },
            { L_,  758, 0xd2b5d377e4a957c0ULL, 0x0fbf7e7b6e1db940ULL },
            { L_,  759, 0x31c8ebbb9af76e78ULL, 0xf40c1398cdfc10ffULL },
            { L_,  760, 0xe5ff32291bf6cdbeULL, 0x1124f835df136eadULL },
            { L_,  761, 0x8334ef050351b196ULL, 0xe6057f7136c1cc05ULL },
            { L_,  762, 0xf544720bcf307e51ULL, 0xde6204be03227167ULL },
            { L_,  763, 0xfffd798828000eedULL, 0xd8c7c3a535aa89fbULL },
            { L_,  764, 0xdefc768e60c414dbULL, 0x8d6f437c06dfab2eULL },
            { L_,  765, 0x300758c92e135ee8ULL, 0x618e9b613aeff75dULL },
            { L_,  766, 0x93c4bbb299f14474ULL, 0x570b412fa6ff3058ULL },
            { L_,  767, 0x9000fed3f6a18419ULL, 0x2571a4483479d746ULL },
            { L_,  768, 0x74535068984e55c7ULL, 0xe7ffdfb069558ed0ULL },
            { L_,  769, 0x17b06d0610fadaeeULL, 0x0380dd3342faaf18ULL },
            { L_,  770, 0xb2ade9ed362a66daULL, 0x234af783b1b79d49ULL },
            { L_,  771, 0x1c20de7a74b85c95ULL, 0x01d4677d9c3158d6ULL },
            { L_,  772, 0xc633f02280ef1e54ULL, 0x327b8b7db17948cfULL },
            { L_,  773, 0x7ba274cbed02fb9aULL, 0x272cb0110c8ad23dULL },
            { L_,  774, 0xad220bfcd750ac60ULL, 0xafed6b0cac364b6aULL },
            { L_,  775, 0xd00daf61642aa5b3ULL, 0x725848a8bb8ed87cULL },
            { L_,  776, 0xfd0f222ea8a7d9bbULL, 0x30c018c68965885bULL },
            { L_,  777, 0xb262a6078f4f3687ULL, 0x360c0bf4bce44d88ULL },
            { L_,  778, 0x81ab5d47e0992eb4ULL, 0x926b500523325c72ULL },
            { L_,  779, 0xcf9ae6ef26b0aa4bULL, 0x6ede533d8000e7b1ULL },
            { L_,  780, 0x251ab7ce9e22e37eULL, 0x337b28992b3910aaULL },
            { L_,  781, 0x40934b467219af1eULL, 0x47e41863c18b5e21ULL },
            { L_,  782, 0x0ad068187d5d5834ULL, 0x4b2ed04c03ac05afULL },
            { L_,  783, 0x63374eab03280dfeULL, 0xdf2412fee3023f04ULL },
            { L_,  784, 0x2aff9092fd202a23ULL, 0x976bad16535b96beULL },
            { L_,  785, 0x4b33578f930f4a95ULL, 0x495965a0fb219652ULL },
            { L_,  786, 0xde6c71e55e20fbfeULL, 0x3693a700327b9b8eULL },
            { L_,  787, 0x8e3d494b25f0b154ULL, 0xd63692bed42da8ceULL },
            { L_,  788, 0x3f903cd9338e442aULL, 0xda224cae3ad99fe4ULL },
            { L_,  789, 0x422be2ecf4df32f1ULL, 0x3dc79d24d838d9b3ULL },
            { L_,  790, 0xb246cb5a80cbcb20ULL, 0x5ba1bd54d5f4579dULL },
            { L_,  791, 0xd842c46b6d8f4073ULL, 0x50b2d6dff119ba8bULL },
            { L_,  792, 0x951b8459257a9d48ULL, 0xe220a12b2204a838ULL },
            { L_,  793, 0xc97de582d4b8d177ULL, 0x367487f3f9e885b6ULL },
            { L_,  794, 0x0ded0acb2ff101c4ULL, 0x7b1a5faf00cfe756ULL },
            { L_,  795, 0x265820042bb93e22ULL, 0xe1060aeaea84eea4ULL },
            { L_,  796, 0x05520571dfd85172ULL, 0xf738e82567c051e9ULL },
            { L_,  797, 0xf2085860bd3702e5ULL, 0x1cd30199f00ba54eULL },
            { L_,  798, 0x251d916252da65c2ULL, 0x50c0ed2006bba145ULL },
            { L_,  799, 0xa53912feb1fe8abdULL, 0x9d00cfb12e6d2e30ULL },
            { L_,  800, 0xd10e0b9c77d567f9ULL, 0x2d80e638f3207b3bULL },
            { L_,  801, 0x8816e166585a2bd7ULL, 0xe408fca1edd35205ULL },
            { L_,  802, 0x8ad610dc774545e5ULL, 0xa97145f43eb7d594ULL },
            { L_,  803, 0x1241e48e7c36eeedULL, 0x1e3bba17ca975ea6ULL },
            { L_,  804, 0xa1c2eb5aac38f176ULL, 0x3e7d596d1edf79b8ULL },
            { L_,  805, 0xd4a91dc25edae99dULL, 0x7a21e797ba2d2a6cULL },
            { L_,  806, 0x91a8e3b7085f9713ULL, 0x10fff21d2acf92f5ULL },
            { L_,  807, 0xb82de0a23ea42f0aULL, 0xe471cd39d8569e30ULL },
            { L_,  808, 0x73d4ebc64ea033c1ULL, 0xdb8ffe386207afc2ULL },
            { L_,  809, 0x2f19da1d57617a58ULL, 0xac7483d0e69722daULL },
            { L_,  810, 0x8d1cb438f7c4a5b9ULL, 0xd3b19ed7a9cdf3c5ULL },
            { L_,  811, 0x960a29438349558dULL, 0x6b15a7879671a721ULL },
            { L_,  812, 0xdacf943acbfe7222ULL, 0x4a0cf643712feba4ULL },
            { L_,  813, 0x06275c76ab72511eULL, 0x914b62ae2a8bb97fULL },
            { L_,  814, 0x6af1085ca4d20015ULL, 0x34bd97b6a7b49734ULL },
            { L_,  815, 0xf524a403bf212d2aULL, 0x2d90a392ef1f0704ULL },
            { L_,  816, 0x156f1f4d6dcb211bULL, 0x1e389239f574a7abULL },
            { L_,  817, 0x75acb8a493bbe510ULL, 0x473fdb5ba2ad7370ULL },
            { L_,  818, 0xb2c6c1c1de87aaf8ULL, 0xdc370a36983cf8e0ULL },
            { L_,  819, 0xab0d90f2b925ba71ULL, 0x8a9082139ced27beULL },
            { L_,  820, 0x7ee17f8d32052a13ULL, 0xa72cbe34e2e6e970ULL },
            { L_,  821, 0x61fe9cd1b7dcef30ULL, 0x3e5235431be4de3fULL },
            { L_,  822, 0x3e0097eab98d9b33ULL, 0xe5a1f3557aa6b50aULL },
            { L_,  823, 0x0c13ed6a0d3f0cbdULL, 0xa6ef1f654b9229d4ULL },
            { L_,  824, 0xfac356feaa872711ULL, 0x19dc5a3d39de515bULL },
            { L_,  825, 0x94708ec79d1157a8ULL, 0x10c748354beb8d0cULL },
            { L_,  826, 0x15469584c51db920ULL, 0x03eaf53800311a16ULL },
            { L_,  827, 0x1e4d3d0920039b27ULL, 0x099842b2d91206e7ULL },
            { L_,  828, 0x9902a04879ab5b17ULL, 0x51261c277ced30cbULL },
            { L_,  829, 0xc726c38b57ab810dULL, 0x8660d28a4e491e6bULL },
            { L_,  830, 0x99dc64a43555ef34ULL, 0xd22cd45829f2fcceULL },
            { L_,  831, 0xe1d27fa314fc3977ULL, 0x4fadd70b8f9cca0cULL },
            { L_,  832, 0xfdb5e27ae2e0fba6ULL, 0xab0c79604ea6cd2eULL },
            { L_,  833, 0x5abc9a7e5018c439ULL, 0x0e9cc27a6ae89783ULL },
            { L_,  834, 0xd07eb534ed38737dULL, 0xe5955bdb24a655ebULL },
            { L_,  835, 0x413773f703d89342ULL, 0x5736e058dba25096ULL },
            { L_,  836, 0x718e8a8096b57992ULL, 0xc51433f7660caeb8ULL },
            { L_,  837, 0x38803610f4fc4ed9ULL, 0xad67a050e8014be9ULL },
            { L_,  838, 0x81d618179d4e5e80ULL, 0x5e0d5e1d5517ef72ULL },
            { L_,  839, 0xbbb9f4a9b381ac89ULL, 0x422465ee28ef75b5ULL },
            { L_,  840, 0xebe9da200b37e480ULL, 0x571b26b7e4b33bfeULL },
            { L_,  841, 0xf7ef8bc4696d0eb8ULL, 0x545e3adbc0e02409ULL },
            { L_,  842, 0xcdde861e9bffa580ULL, 0xebff34010611c132ULL },
            { L_,  843, 0x9891aacd259eccedULL, 0x128eaa291ce57234ULL },
            { L_,  844, 0x20a1b7e7310adaf1ULL, 0xd41fcf211f500129ULL },
            { L_,  845, 0x267c18b3424e0113ULL, 0x2a224a4d2ef7e4f7ULL },
            { L_,  846, 0x5a0d8586785c5618ULL, 0xbef5cae492a968b6ULL },
            { L_,  847, 0x1203f6bdf2b0b30bULL, 0xc9c4b4dd4bd071cbULL },
            { L_,  848, 0x9c571735e0b2aa8cULL, 0xbdaaf28290a233b6ULL },
            { L_,  849, 0x6941878bc2ab0302ULL, 0x08bf48b8aec80776ULL },
            { L_,  850, 0xf3035e5d7e3e055dULL, 0x131e752a11e5063aULL },
            { L_,  851, 0x99725fdd5a97ecedULL, 0x68322dbcb7cd80b6ULL },
            { L_,  852, 0xf6e968cd153b3660ULL, 0xebf8d214504596a5ULL },
            { L_,  853, 0x33e0ae3046920c4cULL, 0xd8e9c1180c2fdf23ULL },
            { L_,  854, 0xc460468842187c32ULL, 0x3915d45f5db7b86bULL },
            { L_,  855, 0x94912c62c00903bdULL, 0xa3aac7923125c555ULL },
            { L_,  856, 0xf397d0d5ce107fecULL, 0xeff0a3ee93d8549aULL },
            { L_,  857, 0x3ef08aea06613366ULL, 0x16679c35398a7217ULL },
            { L_,  858, 0x1288dc74ea5cf6d0ULL, 0xdbe0eaf0edf7fa5fULL },
            { L_,  859, 0xfd9007aa14b35b6dULL, 0x2e82bd6911cc89eeULL },
            { L_,  860, 0x2dcc93644fd6091bULL, 0xe216f26d3e19aa7eULL },
            { L_,  861, 0x6d8026dd28daa819ULL, 0x6569339e85c1f6ccULL },
            { L_,  862, 0xb82de674133fd7aaULL, 0x7a6c852b745146b0ULL },
            { L_,  863, 0x87971fd031df0e3aULL, 0xd2bb921489408e58ULL },
            { L_,  864, 0x6f5fbd175b302dbeULL, 0x4d1e2ed04067d23dULL },
            { L_,  865, 0x24be285b3fdaf08bULL, 0x1ad8613df8363c18ULL },
            { L_,  866, 0x63f9dd8e8bf867daULL, 0x1ddf319970920c12ULL },
            { L_,  867, 0x16408599d8c52c75ULL, 0xfb3ee1e16054d663ULL },
            { L_,  868, 0xb6c1fdfa684ea9a9ULL, 0x44962897e02e73a8ULL },
            { L_,  869, 0x85aa4bbbe5a8dc77ULL, 0xe32c8e1b4a3fb17eULL },
            { L_,  870, 0x8d8d44fa72a053d3ULL, 0xcfff8cca2cfcabdaULL },
            { L_,  871, 0xbe1a33f09f7c7201ULL, 0xf5c9fa16e4300ff7ULL },
            { L_,  872, 0xa4cf0a637a764f77ULL, 0x95d9c9e056018933ULL },
            { L_,  873, 0x122fcaeb61157c0aULL, 0x0b34e56f622e79a7ULL },
            { L_,  874, 0x945daf2f972896caULL, 0x21bd92b53e9921a2ULL },
            { L_,  875, 0x0c3af30e8fb3b208ULL, 0xf61d493255615c94ULL },
            { L_,  876, 0xdeb02573b222d78eULL, 0xd0b1a46c3052d499ULL },
            { L_,  877, 0x342fe42c3b10f58dULL, 0x2afe40478f46e51dULL },
            { L_,  878, 0x5105bf7c5245de7cULL, 0x7bc87255b6af1c12ULL },
            { L_,  879, 0x4f43d9a91dc5fe3bULL, 0x7b74617af7003185ULL },
            { L_,  880, 0xc771aa776c3f7c87ULL, 0x29a8ca91ba3e5192ULL },
            { L_,  881, 0x986014425a8cd27dULL, 0x300ad8483342d9c5ULL },
            { L_,  882, 0x8ae2e643b5b970abULL, 0x844c9b33fec6e5c6ULL },
            { L_,  883, 0xe51f2b923c50ec15ULL, 0x873b3e982d14d981ULL },
            { L_,  884, 0x25aadcb26c77317eULL, 0xcf4078237ce33137ULL },
            { L_,  885, 0x1757f089ad9f65e4ULL, 0x7205219dcffdb900ULL },
            { L_,  886, 0x9956cea4d69b59a7ULL, 0x7a3df21e9f9651fbULL },
            { L_,  887, 0xd4525670564104d7ULL, 0x787953601754bc8bULL },
            { L_,  888, 0x1ae231a1bb4f8bb6ULL, 0x4689d7fbf86aec8fULL },
            { L_,  889, 0x908b07d9ea6d401bULL, 0x6ddeda682320b6bbULL },
            { L_,  890, 0xdc1a28f047aa71e9ULL, 0xf4de6096e81e8b21ULL },
            { L_,  891, 0xb8c3a40ba08d879bULL, 0x63c29ff46a67a72fULL },
            { L_,  892, 0xbac726a1a4e4efeaULL, 0x52bcedddeaa03c1cULL },
            { L_,  893, 0xbb81c5913e1c174bULL, 0x135f5bdf6b907f39ULL },
            { L_,  894, 0xbf73742922d98407ULL, 0xaa29be31f5719a8cULL },
            { L_,  895, 0x965a04203cd6219dULL, 0x8a4ce24e911c4436ULL },
            { L_,  896, 0x3179550a61bf3981ULL, 0xb012f355d3143e24ULL },
            { L_,  897, 0xff7b19c973efc399ULL, 0xcbac405295a832c4ULL },
            { L_,  898, 0x85c83984a907ae11ULL, 0xb3263941b8719a21ULL },
            { L_,  899, 0xa12e7c718b2f5d62ULL, 0x5d6482283f41b72fULL },
            { L_,  900, 0xc23ce8ee7474f482ULL, 0xc974378f8ebc3e98ULL },
            { L_,  901, 0x694c833a66d76e40ULL, 0x84c7c81aaccdd150ULL },
            { L_,  902, 0xa4a7672fb0641aa5ULL, 0x89f03d1bffb32d0fULL },
            { L_,  903, 0xf48a0cf7787edd17ULL, 0x61793a73a73300dcULL },
            { L_,  904, 0x344f7a6d77e9d868ULL, 0xfac59359b6d0f3baULL },
            { L_,  905, 0xb516a006bce69e0fULL, 0x424a81ece77fe3a3ULL },
            { L_,  906, 0x54ebb49d5e69d600ULL, 0x273429d7a4cb4b63ULL },
            { L_,  907, 0xc1f0808e6f0af658ULL, 0x318f22ff16f270f4ULL },
            { L_,  908, 0xbbc0f8c254d90b1fULL, 0x53afc367545e1a72ULL },
            { L_,  909, 0x9a427da12e9f93e5ULL, 0x5685172fd70d2f8bULL },
            { L_,  910, 0x7f8e3dcdb366197bULL, 0xa8a5ebbab48a9b64ULL },
            { L_,  911, 0x8fbb1f935899c999ULL, 0x5b9fcd639d102418ULL },
            { L_,  912, 0xefed7e5bc246a1f8ULL, 0x45362ffd9b88c909ULL },
            { L_,  913, 0x85a9f37aa2ea3d92ULL, 0x3a2d385d3ce560e8ULL },
            { L_,  914, 0xbf0695d8bbc2db15ULL, 0xe4cdf27391c3d3d7ULL },
            { L_,  915, 0x90ac55ccf285e7c8ULL, 0xe415d2a994bcc540ULL },
            { L_,  916, 0xf16d1df65a3eaffdULL, 0xa5cb8c3508519bc1ULL },
            { L_,  917, 0x68c00f9bd7f4a53dULL, 0x8c65389bddadc7afULL },
            { L_,  918, 0x14e1d4b6cff694c9ULL, 0x27417d9f4bdf2914ULL },
            { L_,  919, 0x0b6287396822f2f5ULL, 0x99b599f01e65f808ULL },
            { L_,  920, 0x9853b67c9a1e433bULL, 0x8dba10f949419053ULL },
            { L_,  921, 0x2a7795de326f7ea2ULL, 0x028b4ad72c3fdf53ULL },
            { L_,  922, 0x15716258b31a7b67ULL, 0x1f8dbd1ff08ddee1ULL },
            { L_,  923, 0x2519dcfa4a6b73a1ULL, 0x982addc153a90286ULL },
            { L_,  924, 0x1734d8a50c9804f2ULL, 0xc279c15c8749e1e5ULL },
            { L_,  925, 0xc8d00d573c505015ULL, 0xa0fea04ec8194803ULL },
            { L_,  926, 0xbb8feefe4630edc5ULL, 0x55dc2011904488baULL },
            { L_,  927, 0x5b06908d690671d7ULL, 0xecdd0a22b3d6ce12ULL },
            { L_,  928, 0x9bc3c49a89d024adULL, 0x17214ecb2b08bfd8ULL },
            { L_,  929, 0x0ed388ab5c427e47ULL, 0x66738b7c8493197aULL },
            { L_,  930, 0x98aca0ec1cbe6f27ULL, 0xd874e86d1154d273ULL },
            { L_,  931, 0x3e1b3eee971c2738ULL, 0x9443cdd3ac7b8e20ULL },
            { L_,  932, 0x3c9c24166024862cULL, 0x37d5c49f37c7a323ULL },
            { L_,  933, 0xaefa1d5b8d86ef9dULL, 0x68c9bd1676704075ULL },
            { L_,  934, 0x0b18b1998da87c58ULL, 0xb2e11e3c76aa6066ULL },
            { L_,  935, 0xcbf66f81562c9d2cULL, 0xb715c4dbd23045b9ULL },
            { L_,  936, 0x79c1309a67d8a8c2ULL, 0xe11cf958cfc0908fULL },
            { L_,  937, 0x53b3bb068c3b3c3aULL, 0x5e59f39b6adae982ULL },
            { L_,  938, 0xc95eaed8b40b383aULL, 0x512c3c206f8df1cbULL },
            { L_,  939, 0xe1676b5ba1e30c65ULL, 0xb70fe24816be3f9aULL },
            { L_,  940, 0x6fdc684a577bf070ULL, 0xcdad7f12ca852198ULL },
            { L_,  941, 0x3dbcca689d917d2fULL, 0x6e8907318e258bcaULL },
            { L_,  942, 0xa522130b2b9c5203ULL, 0x28fe8207eb9c3c78ULL },
            { L_,  943, 0x6db28db2d554af92ULL, 0x478e9fcae92b26a2ULL },
            { L_,  944, 0xcdd735fd2158acfbULL, 0x39621a1ddfb2c129ULL },
            { L_,  945, 0x8eb22d0f0325df3cULL, 0x7f2093bb293cf534ULL },
            { L_,  946, 0xe9203c49227e4ea7ULL, 0x14858bf7aae10b3cULL },
            { L_,  947, 0xea9674cc0c210ef0ULL, 0xd1675acdc9461e76ULL },
            { L_,  948, 0x67a5bfd37aaf8a5aULL, 0xab84c24e0f002098ULL },
            { L_,  949, 0xa92a29d8e1ace50eULL, 0x18185979d2f6d2baULL },
            { L_,  950, 0x4b13111c364d9532ULL, 0x366afb1b57415425ULL },
            { L_,  951, 0x2bca7c0c94f3066aULL, 0xd73068c5c55d5522ULL },
            { L_,  952, 0x3156c76b32511a74ULL, 0xb3fb9d6b7aa8b97eULL },
            { L_,  953, 0x001f21be8437916cULL, 0x423cd074e695438cULL },
            { L_,  954, 0xb565d41a57e88303ULL, 0x2c44ee9449625990ULL },
            { L_,  955, 0xf58eeb03920c5b61ULL, 0xb66054631317ac4dULL },
            { L_,  956, 0x32fce0542b5dc3d1ULL, 0x638709c37a965a8dULL },
            { L_,  957, 0x55d85bc21f4e69bdULL, 0x775d0b80d5cffb51ULL },
            { L_,  958, 0xfcb5ed283a5c53e3ULL, 0x968a21ad9a2ad5a7ULL },
            { L_,  959, 0xdc1be90759e2822eULL, 0x1e30c946b2660679ULL },
            { L_,  960, 0x792d360c8fe8476aULL, 0x6a5bc1e4cae17522ULL },
            { L_,  961, 0x6d25f15f2903ce32ULL, 0x287e7bb257f6c9ebULL },
            { L_,  962, 0x65cc182566502cd6ULL, 0x5a03ff506db13b89ULL },
            { L_,  963, 0xc355ac338ccfc62eULL, 0x9fb94fc72924ee91ULL },
            { L_,  964, 0x951e33a9a6390dbeULL, 0xd5e582fcc7c7d392ULL },
            { L_,  965, 0xda7c64c48151e033ULL, 0x8dee17321ac8bb1fULL },
            { L_,  966, 0xa69341aa7a001440ULL, 0xd975ce484599d581ULL },
            { L_,  967, 0x2b08158bdd7a44eaULL, 0xd4c9d0dae7526aa2ULL },
            { L_,  968, 0xf9a3ffddd5531c9eULL, 0x489b030a0cdab9f0ULL },
            { L_,  969, 0x75e2c899dcdb6eebULL, 0xd09e834a9fcbb717ULL },
            { L_,  970, 0x8a4174d3c73c1ea2ULL, 0xc5319fab1a1d2710ULL },
            { L_,  971, 0x07568ee68a78b5a1ULL, 0x99387a173180c193ULL },
            { L_,  972, 0x6b6f040a62408e37ULL, 0x94082b88268a433dULL },
            { L_,  973, 0xe2847b22d1523e4aULL, 0x13b7551f50f5859fULL },
            { L_,  974, 0xce6bddb02474e63cULL, 0x181d9b075988e82dULL },
            { L_,  975, 0x8bd696f60fe65a32ULL, 0x382817a96e49a4ddULL },
            { L_,  976, 0xd2e36f9ecbeb6328ULL, 0x7ba7fa3925c4f25dULL },
            { L_,  977, 0xb50fa52a666eb970ULL, 0x0308b3ce5abb536fULL },
            { L_,  978, 0xfa5cc6b2fc27d5dfULL, 0x10d751c3631e3789ULL },
            { L_,  979, 0xfc09cc59935522c3ULL, 0xd723a04125a0b040ULL },
            { L_,  980, 0xdaa55d32a8b2385aULL, 0x16f9f8c4f2761f1cULL },
            { L_,  981, 0x2a519c9babd544fbULL, 0xcb47cdca25997ae6ULL },
            { L_,  982, 0x99904bb621d8d69aULL, 0x84dd2a312ff80921ULL },
            { L_,  983, 0x3b043785acd20cafULL, 0x5a325252c588487fULL },
            { L_,  984, 0x1bc84ec53991cefcULL, 0xa890103a951bdc15ULL },
            { L_,  985, 0xd99c260215359bd5ULL, 0xe5f375c35cdc1e2fULL },
            { L_,  986, 0x69925d3fc5322a05ULL, 0x3ce30dcef6e57c06ULL },
            { L_,  987, 0x572179ceb8b84cd9ULL, 0x8aede0134c3c24a0ULL },
            { L_,  988, 0x291f60b2fa13fe22ULL, 0xe4811c32a03daa64ULL },
            { L_,  989, 0x44232521335a5aaeULL, 0xf0adcb1e20dd6333ULL },
            { L_,  990, 0xffc1ee651a6fa98fULL, 0x2869b2d4fabffd49ULL },
            { L_,  991, 0xa71868c214db2d7eULL, 0x0913760bb55c4656ULL },
            { L_,  992, 0x02fee0037e66aec0ULL, 0x61aa7cb511ebb3fbULL },
            { L_,  993, 0x0ad400294058bb15ULL, 0xd74cd2779b5e3f72ULL },
            { L_,  994, 0x503fb697c8660ce2ULL, 0x9d3cd90d70edacb5ULL },
            { L_,  995, 0x2ab0ea74feb6e6e1ULL, 0x60e86a2f9dc43b35ULL },
            { L_,  996, 0xd9477d38e4fc5ef7ULL, 0x3bc50e4d4c911e09ULL },
            { L_,  997, 0x656b67fffdbea30fULL, 0xa1bcc22fa7662dcdULL },
            { L_,  998, 0xf00cc06f6746bf5bULL, 0xd273d371a35d2816ULL },
            { L_,  999, 0xc2a6a09ffb3fd5f3ULL, 0x74caeba16dc6fef1ULL },
            { L_, 1000, 0xed99710028f72b05ULL, 0x5bb4c8f434a3c665ULL },
            { L_, 1001, 0xe4633f4c154fd45dULL, 0xe811220df9dd6644ULL },
            { L_, 1002, 0x5c06c0eea1ef537dULL, 0xddad291d95f81bbeULL },
            { L_, 1003, 0xa00c3121b5596f16ULL, 0x5a1f7dfa2ed8629cULL },
            { L_, 1004, 0x086011db7b004d11ULL, 0xeb270acc1e544a4fULL },
            { L_, 1005, 0x86f517c4b69d137dULL, 0xd67e95656e5dc513ULL },
            { L_, 1006, 0x20bd19553ccb2f68ULL, 0xb3e75e039168d13bULL },
            { L_, 1007, 0x9ba422f9bddd78c6ULL, 0x5929f72ce00d28d1ULL },
            { L_, 1008, 0x78c45880c808f3eaULL, 0x46d33f49740582f5ULL },
            { L_, 1009, 0x7943292376a69331ULL, 0xaa2319885327eaacULL },
            { L_, 1010, 0xb8dfff9f719ab056ULL, 0x2cb975d84d144cc3ULL },
            { L_, 1011, 0x4cf64a3ecaf95ff6ULL, 0xbbd00ba015ddea0fULL },
            { L_, 1012, 0x3ea9f3b7ddbb157bULL, 0xca059a5396676fc8ULL },
            { L_, 1013, 0x7d25fe7760df115bULL, 0xeba840036991ec41ULL },
            { L_, 1014, 0xce0fdb827f620501ULL, 0x2079dec58d396c32ULL },
            { L_, 1015, 0x9123d09e454b1daeULL, 0xf9a46405d1ab017eULL },
            { L_, 1016, 0xb4ac1647867d4040ULL, 0x9ea8c567d2f40521ULL },
            { L_, 1017, 0x704e28f63f36d286ULL, 0x1488b8752d18e545ULL },
            { L_, 1018, 0xfa664e0302c3b4ecULL, 0x927e8177387cbbaaULL },
            { L_, 1019, 0x41b659a7b813df64ULL, 0x391ec185f4f11d5dULL },
            { L_, 1020, 0xe2d527dc131ea9a2ULL, 0x7cd683c07950d2c5ULL },
            { L_, 1021, 0xc410edb59fd8c31fULL, 0x40a4e03fb874c365ULL },
            { L_, 1022, 0xc657afe28f7be420ULL, 0xfd75cff89e707763ULL },
            { L_, 1023, 0x5881b21a82a536adULL, 0x4265179c459dde35ULL },
#else
            { L_,    0, 0x0840b4221c56e786ULL, 0xe0a732a8bf7d7e68ULL },
            { L_,    1, 0xd2e76925e210d3cfULL, 0xc148bd58364217b0ULL },
            { L_,    2, 0x7f7295ca10b85125ULL, 0x6b435e94355591ccULL },
            { L_,    3, 0xc0c3febe8e225d76ULL, 0xbdc63ece1ff113edULL },
            { L_,    4, 0xe7554e89bcbe027cULL, 0xdd6b61dd0efdb1baULL },
            { L_,    5, 0x53c98e5aa95f9be0ULL, 0x1161e83cae3d99eeULL },
            { L_,    6, 0xe87bc15b7ac0e06cULL, 0x5ae546bdcf38d604ULL },
            { L_,    7, 0x998c5bbb0bb71755ULL, 0x2f6311f9c0838eeaULL },
            { L_,    8, 0x3a6d47da485c2cf6ULL, 0xcf5daebfa5f6ca8bULL },
            { L_,    9, 0xa0a4ed2aa4a656f3ULL, 0x2876470e1090a03dULL },
            { L_,   10, 0xdaf4e3bab72e5ff3ULL, 0x2f9a787a8831a890ULL },
            { L_,   11, 0x63cdca0179487362ULL, 0x05deb4dce84da670ULL },
            { L_,   12, 0x50fd9a01cb7299a6ULL, 0x484904d422220a4cULL },
            { L_,   13, 0x729ed04e8bd57948ULL, 0x076110f87bf2bb61ULL },
            { L_,   14, 0xd7c12c491db25301ULL, 0xcdc1982ab1b4406fULL },
            { L_,   15, 0x3de574aea57b690aULL, 0x462c2a05d9740505ULL },
            { L_,   16, 0x252f9a8809d30101ULL, 0x42304d11bbdd7ddbULL },
            { L_,   17, 0x481b2feea03ebb65ULL, 0xe1b611b975e8e76bULL },
            { L_,   18, 0xf45fa91802c88300ULL, 0xc04a66d8c0bd87a1ULL },
            { L_,   19, 0x811f19ba8ffd4578ULL, 0xdd645d9b4f86bfebULL },
            { L_,   20, 0xb169248be0b69dabULL, 0x4ba307b8f80e2507ULL },
            { L_,   21, 0xa57c12b5061c6400ULL, 0x33e15ac55ccf8bb4ULL },
            { L_,   22, 0x59d80edac9b936daULL, 0x2cb97a136435df21ULL },
            { L_,   23, 0xb01f83cd1312aceeULL, 0xf29e27779902436aULL },
            { L_,   24, 0xabbb586df144aad8ULL, 0xa82fb7af1666cc3bULL },
            { L_,   25, 0x0bf00968a41c8734ULL, 0x29c95dbcd6001dd1ULL },
            { L_,   26, 0x8438a01f8a75317bULL, 0x112ba359108b9201ULL },
            { L_,   27, 0x22042be81c6e2150ULL, 0x763aa7063733543cULL },
            { L_,   28, 0x9102141bfba788d4ULL, 0xac50507da8d1943dULL },
            { L_,   29, 0x926b9fb2774276a4ULL, 0x5c700d7938b0c895ULL },
            { L_,   30, 0x12a37b6312c7acd9ULL, 0xc9a672659c0a9dbbULL },
            { L_,   31, 0x9d1d57e8eab1b8d9ULL, 0xbd7ab2ca521150e2ULL },
            { L_,   32, 0xecc03a56b704b6c1ULL, 0x452202b2878ae5e0ULL },
            { L_,   33, 0xe152ac5a9840226bULL, 0x198c3940578d3cecULL },
            { L_,   34, 0xaf5783ea32b5d702ULL, 0xf458e71d5b3a9795ULL },
            { L_,   35, 0xe26db061798cdc58ULL, 0xce6f3cd14eee5a30ULL },
            { L_,   36, 0x9210cf53a5dda695ULL, 0x133248bb9ed68990ULL },
            { L_,   37, 0xdeeeebad6acc25d1ULL, 0x7bfb15b3fe0afbd9ULL },
            { L_,   38, 0x022a71ae45d1a775ULL, 0xfb248f8c98dfb551ULL },
            { L_,   39, 0xad12d8d7b19a989cULL, 0xa4a1f4c71faa2b38ULL },
            { L_,   40, 0x04db2b2728057650ULL, 0xcf2336836eeeaddaULL },
            { L_,   41, 0x56d45884f28184f4ULL, 0x53d5999a9ead9d4cULL },
            { L_,   42, 0x4b45c7b363103bd2ULL, 0xbeab14b13d5a0d57ULL },
            { L_,   43, 0x9d0624f22f432987ULL, 0x537586057e34bcc7ULL },
            { L_,   44, 0x59421ef882182e30ULL, 0x20b1d7a45c141836ULL },
            { L_,   45, 0xbb712f3f0e8b1a8bULL, 0xf629a53bd9f92cebULL },
            { L_,   46, 0xe5f0efe40a6d092cULL, 0xb0f8a14ce765d7aeULL },
            { L_,   47, 0x76c86a6dc917b2feULL, 0xa6fd9a33e5c35434ULL },
            { L_,   48, 0x7a77a8dc2ac4c0dcULL, 0xea0a7da80d5045d0ULL },
            { L_,   49, 0x4c0a1157419208e9ULL, 0x3f1ef25f6c508c07ULL },
            { L_,   50, 0x8cb7660949376828ULL, 0xa6b9465d224a445dULL },
            { L_,   51, 0xe4bde7c836ac3b10ULL, 0x531b894026e4ba28ULL },
            { L_,   52, 0xbcd591d183eb05f1ULL, 0xe123757124df0c28ULL },
            { L_,   53, 0x61fd913360657e11ULL, 0xedcb3f9079f384edULL },
            { L_,   54, 0xfce4c1bf6c6c460cULL, 0x704dd85aa42acdc8ULL },
            { L_,   55, 0x1254b5a21feb10a7ULL, 0x677e861feaaf53ffULL },
            { L_,   56, 0x854c9c5b3bea7bd2ULL, 0x89c2e2e08ee9fc33ULL },
            { L_,   57, 0xf63dcbc5a9eceb3cULL, 0x692da9671c8fa4caULL },
            { L_,   58, 0x258e44f4991be997ULL, 0xe91aa0e49ebaa45aULL },
            { L_,   59, 0xc8367b81979beeb4ULL, 0xa40e9770056f5ad7ULL },
            { L_,   60, 0xe5ad021cd7ce0d64ULL, 0x270936f66d8cb171ULL },
            { L_,   61, 0x8eb79549038cb845ULL, 0xd55ca46e23540186ULL },
            { L_,   62, 0x9f7f2151bd2d9e9bULL, 0x907039d390f25187ULL },
            { L_,   63, 0xe9008626e3ceab5dULL, 0x61194601bc4bffd3ULL },
            { L_,   64, 0x0f9250e1632e090bULL, 0xd6ee4adfc1f15ba2ULL },
            { L_,   65, 0x1ee5fb17e7c3c903ULL, 0xf77c34ded96599b3ULL },
            { L_,   66, 0x7c4cdde8c6955701ULL, 0xcad5ee50701ff28dULL },
            { L_,   67, 0xf12acf53517c1eb1ULL, 0x5ddf24de7b8d95efULL },
            { L_,   68, 0x8257a6494dc23687ULL, 0xf0145d4b5d778b19ULL },
            { L_,   69, 0x1c64db84dd1a9a0fULL, 0x68c02cfbce3bb1acULL },
            { L_,   70, 0x7474aa37c8765eebULL, 0x87e9dd57a988398eULL },
            { L_,   71, 0x6aeb990bc141a0ccULL, 0x2179316f3ea3e125ULL },
            { L_,   72, 0xe5666dfb380334f7ULL, 0x68a2fa2ab200a384ULL },
            { L_,   73, 0x5a2716777cdbb47eULL, 0x7bbfd45d67f39943ULL },
            { L_,   74, 0x95e3dbca12b0227bULL, 0x9525419281b1ed61ULL },
            { L_,   75, 0xc549b1b121f8b8f5ULL, 0x90e3e2062622110fULL },
            { L_,   76, 0x4c71fa6fa25950b4ULL, 0xe1cc11527bcd7402ULL },
            { L_,   77, 0xeacfd921327f8ffdULL, 0x352975903355c170ULL },
            { L_,   78, 0x92c0ce8d4eb2acb8ULL, 0x55daa4552002cab1ULL },
            { L_,   79, 0x153d8c21e3eca35dULL, 0x7a1584c0dbfd2a15ULL },
            { L_,   80, 0xa74ab86732a982e0ULL, 0x4f0cbb25b64682c3ULL },
            { L_,   81, 0xb4c9f0a2a541f371ULL, 0xdfa8b77f70ad1f5fULL },
            { L_,   82, 0x6b72ca76ffe0afafULL, 0xc89381b92eac8046ULL },
            { L_,   83, 0x026456f026388f80ULL, 0x562866d9ee279cb7ULL },
            { L_,   84, 0x0af208960314d6ccULL, 0x12470c297b39c323ULL },
            { L_,   85, 0xef5f6b62c1f6d610ULL, 0x5d1bc2bcfd70badaULL },
            { L_,   86, 0x4f7e3adf0ccdbbfbULL, 0xd4fc9ed963e844bdULL },
            { L_,   87, 0xc648a4c2c8aeef30ULL, 0x34f320c484c485d9ULL },
            { L_,   88, 0x2592d360e9440891ULL, 0xf542d8d5aab53fa2ULL },
            { L_,   89, 0x58548f91bf608bbfULL, 0x511b5801ccb8187aULL },
            { L_,   90, 0x6f47db10648d0b11ULL, 0xb9cc2f359f645a30ULL },
            { L_,   91, 0xd966ef3597dd8263ULL, 0xa0ccf2fe5814edd1ULL },
            { L_,   92, 0xb19cb161e55aa66bULL, 0xcf25831127845898ULL },
            { L_,   93, 0x38cd86567347a192ULL, 0xc56685095eed6135ULL },
            { L_,   94, 0xa46bc6ea3514a5aaULL, 0x402ed89af096dc0bULL },
            { L_,   95, 0x841c74dc8be6b78aULL, 0x5f396bb35bc415aaULL },
            { L_,   96, 0x148195cb183987d4ULL, 0xd70610d327f360edULL },
            { L_,   97, 0x978b071bcec883edULL, 0x391a3760c10d23dbULL },
            { L_,   98, 0xf18f26d6414fdd0bULL, 0x3b5a440510d8254aULL },
            { L_,   99, 0x3c394b62d369865dULL, 0x2712faf2a7ffc89cULL },
            { L_,  100, 0xc6a1917b36c9457aULL, 0x83cb418071766a86ULL },
            { L_,  101, 0xe91ff77c26024608ULL, 0x70b18aef7e35cff0ULL },
            { L_,  102, 0xde96fa08f994adc8ULL, 0x24d067b89045776bULL },
            { L_,  103, 0xe7a50c4dd53b4370ULL, 0x5838289923f194e6ULL },
            { L_,  104, 0x3fcb4739d67ebdf3ULL, 0xc10e5b818acf53d7ULL },
            { L_,  105, 0x35639354445dc495ULL, 0x4dbd6d19361a5c72ULL },
            { L_,  106, 0xdbf605f8a6371aa3ULL, 0x2f75789a789ca74eULL },
            { L_,  107, 0x9482fc564d24f7edULL, 0x3093c06d2714aa1bULL },
            { L_,  108, 0x6eac5009ba4d7af8ULL, 0xe1719663d8c36637ULL },
            { L_,  109, 0x07e8aeda7350896cULL, 0xf2d175cefcb99a9eULL },
            { L_,  110, 0x069b49a61b7e81e5ULL, 0x36a2e3c601bfd595ULL },
            { L_,  111, 0x4f3211c487159303ULL, 0x060904b03fcdff3eULL },
            { L_,  112, 0xc6483b85e8fed698ULL, 0x402747c0aab25efaULL },
            { L_,  113, 0x128b301ac23cb59cULL, 0x83805d3e95ab1980ULL },
            { L_,  114, 0x2323a1f832c7e795ULL, 0xb9f89001c5569e2aULL },
            { L_,  115, 0xf2d394a77b7415a1ULL, 0x5219895c188a79c7ULL },
            { L_,  116, 0x6d4e0f8ca8356432ULL, 0x39ab96c86c04c8c1ULL },
            { L_,  117, 0x63c186141d68f97bULL, 0xca380bfd13e6ed2dULL },
            { L_,  118, 0x525e6d29487a28dbULL, 0x4d7f372a369e46a5ULL },
            { L_,  119, 0x4ec443fb1de96a76ULL, 0xa175a151b670a70cULL },
            { L_,  120, 0x74a144fc2c27b16fULL, 0x9597c364606e5e4aULL },
            { L_,  121, 0x2189440e9d735da4ULL, 0xc15df4880d96aef7ULL },
            { L_,  122, 0xab0e824961f382f9ULL, 0x5d590a8770201fb9ULL },
            { L_,  123, 0xd5c2f305e787a104ULL, 0xe47e5fa26a105cafULL },
            { L_,  124, 0xbe1c353e4e8a50e3ULL, 0x12aa46635679b16bULL },
            { L_,  125, 0x80f13118265f2e42ULL, 0xa9d1dba7842a75d1ULL },
            { L_,  126, 0xd3b2c60b8d799e07ULL, 0x2de81f0c81874904ULL },
            { L_,  127, 0x3ddd55955e708f0dULL, 0x6079e1fc7290f37bULL },
            { L_,  128, 0xdc3c41e7e60bbb79ULL, 0xb41030114695a299ULL },
            { L_,  129, 0xee1a380505387935ULL, 0x5549de23b9fb34f5ULL },
            { L_,  130, 0x1ff4de162703a891ULL, 0x17b8f13b241f5a42ULL },
            { L_,  131, 0x87c69c40186477efULL, 0x8c3298be7ff9d2d2ULL },
            { L_,  132, 0xd6f5f3fe43a69892ULL, 0xaba9bd15b4fcb151ULL },
            { L_,  133, 0x40a39d2333d362d8ULL, 0xb7e8170e3b8e2812ULL },
            { L_,  134, 0xed87697a08f8805aULL, 0xe497c989f6b0f9bdULL },
            { L_,  135, 0xaa9a3362fd0cd09bULL, 0x32783a60a51ae556ULL },
            { L_,  136, 0x97787fa6963db8dbULL, 0x953d1a8d1920625cULL },
            { L_,  137, 0x3d3d0c68d7f6ba02ULL, 0x912bce781d2dea0aULL },
            { L_,  138, 0x8ea419a6135c9b70ULL, 0xec989f18cd1a2aeaULL },
            { L_,  139, 0x6e84677b5da4797cULL, 0x8d778f392f8c79f7ULL },
            { L_,  140, 0x0d8765ae7a4f6d6eULL, 0xeee0c0d3bcefb75eULL },
            { L_,  141, 0xa1d9e879fcb59fd3ULL, 0x299232f519f35a4eULL },
            { L_,  142, 0xa3d02de8e38155e4ULL, 0xc7bbbdf187a93856ULL },
            { L_,  143, 0x78c6e72bfe3f259aULL, 0x0f9562284e27ed8aULL },
            { L_,  144, 0xe565df8700a81b46ULL, 0x221bb04217ab01a5ULL },
            { L_,  145, 0xb2abe1c697a1101eULL, 0xb90789c2fc3ea1e5ULL },
            { L_,  146, 0x192b065d4bef2b27ULL, 0xc38a935033e6783aULL },
            { L_,  147, 0x947010bd61e2310aULL, 0xd45f8083cfc02b40ULL },
            { L_,  148, 0xf1e93744b65a5400ULL, 0xe955abeaf30cd54fULL },
            { L_,  149, 0x7b8a251589047bf7ULL, 0xd79691fdffdb3600ULL },
            { L_,  150, 0xfd4adb729b877bcbULL, 0xda5c4db8dc113704ULL },
            { L_,  151, 0xc72bd6527b5cbed8ULL, 0x1c051b47b7713a25ULL },
            { L_,  152, 0x21af640f268ecff0ULL, 0xb9484fd4697834cfULL },
            { L_,  153, 0xefe6a245df44ac68ULL, 0x41c8b67ec9b03050ULL },
            { L_,  154, 0x409e6ce52025db87ULL, 0x7a6821bbfbed2975ULL },
            { L_,  155, 0x6eeb9ac90d2257e3ULL, 0x7d354136613508faULL },
            { L_,  156, 0xa356a1af26484365ULL, 0xdbc2e6ad3d4078c6ULL },
            { L_,  157, 0x2bedb157b5e93ca6ULL, 0x270e6017c4e39ce4ULL },
            { L_,  158, 0x74f7411d8d7c1b50ULL, 0xe8b9df8ecf51c0beULL },
            { L_,  159, 0x19a8546b137750a8ULL, 0x8213c93c9249fbd2ULL },
            { L_,  160, 0x6d23c064950ef6c4ULL, 0xa345ceaaedaaf918ULL },
            { L_,  161, 0xdb03ea22a8493bd2ULL, 0xa302d1bec87bbdaeULL },
            { L_,  162, 0xe568493820e98232ULL, 0xae8d01df8e6eb932ULL },
            { L_,  163, 0x154bf6e93b3e3cb8ULL, 0x40a15514b33e6088ULL },
            { L_,  164, 0x3cccadfe84c53a20ULL, 0x0678fbeef9d9f016ULL },
            { L_,  165, 0xc6298d7e6872fa3eULL, 0x7e1e65b314a31efdULL },
            { L_,  166, 0xa10a58440826a694ULL, 0x2e5c05de56331db3ULL },
            { L_,  167, 0x0208b6aae94df613ULL, 0xf09f8d49501500d0ULL },
            { L_,  168, 0x1d5f13c73c64022dULL, 0x128b201a3175c6b8ULL },
            { L_,  169, 0x7d98f1428c016e24ULL, 0x8b59f8dc01feac60ULL },
            { L_,  170, 0xc5b6fff12362af0dULL, 0x0a857c6266389cd5ULL },
            { L_,  171, 0x0a16b87d4f39db76ULL, 0x3967a9c1e49b4ceaULL },
            { L_,  172, 0x2079a8ba651e714bULL, 0x43234c313a0c0ad8ULL },
            { L_,  173, 0x41d03db5251f5db0ULL, 0xb17e799d6c057c53ULL },
            { L_,  174, 0x3e5d67caa6d21270ULL, 0xcc279b6b72444e3fULL },
            { L_,  175, 0x6ff12220a3d187ffULL, 0x9f9d8b3b316b2a53ULL },
            { L_,  176, 0x08526c8e371c78f6ULL, 0x7d7db1289740d32fULL },
            { L_,  177, 0x43f23f67c50e0598ULL, 0x442120203b7d3d7dULL },
            { L_,  178, 0x9e8b3d8b1e9927daULL, 0xb214669a78ab0ee9ULL },
            { L_,  179, 0xf0ed80b86f90ab0dULL, 0x90ac9f6e8f407ca9ULL },
            { L_,  180, 0x45003475c83d8625ULL, 0xaeed9befa4a8631eULL },
            { L_,  181, 0xbbaaf72f42539d18ULL, 0x591d7606b95d347aULL },
            { L_,  182, 0xef0e9f5fbe270185ULL, 0xf73e2d584c544afaULL },
            { L_,  183, 0x9df262a4e4125d69ULL, 0x0e5d10ddd21f0ad2ULL },
            { L_,  184, 0xba7e6a7145b66261ULL, 0x4139794c62653d87ULL },
            { L_,  185, 0xadb0893ed75e05eaULL, 0xf35611ad5c3d7147ULL },
            { L_,  186, 0x300d858b9dc2e60fULL, 0x8f173eb1b398797aULL },
            { L_,  187, 0x8114143c30927581ULL, 0xaecbda4a22794678ULL },
            { L_,  188, 0xcb9bc500899ec5bbULL, 0xabccfef19ab0e6a5ULL },
            { L_,  189, 0x30fcebe11ea4de57ULL, 0xd7d5c6a24f4f8fafULL },
            { L_,  190, 0x0181df551cfafc05ULL, 0x5f7d4c04c1e6ad2eULL },
            { L_,  191, 0x1b851aed5a165c12ULL, 0xb867bcaccabb0ba8ULL },
            { L_,  192, 0x3120540cb13be951ULL, 0x976fca6931fc998aULL },
            { L_,  193, 0x49f2c1c2d88b3e42ULL, 0x36c1944aaa599021ULL },
            { L_,  194, 0x24a7ec866713274bULL, 0x03c0f93e6e19c272ULL },
            { L_,  195, 0xb73c9a4dec882eb9ULL, 0x1910a8979501cea4ULL },
            { L_,  196, 0xc9a0ffa00369b290ULL, 0x1d10b33c9b0bede4ULL },
            { L_,  197, 0xda2699f03659c62bULL, 0xdd4b95970898cb29ULL },
            { L_,  198, 0x4d4ba926bb8635b8ULL, 0xf89c86680f06df78ULL },
            { L_,  199, 0x9c1bca0aa4daef9aULL, 0x964fe3a1118e7a46ULL },
            { L_,  200, 0x1ca8bac7d07dc49cULL, 0x3525828e857a965fULL },
            { L_,  201, 0x1085c3ef55158972ULL, 0x040ef1ab6c2fac9dULL },
            { L_,  202, 0x0d347b8b4c8668e8ULL, 0xfcdc65df07bd2262ULL },
            { L_,  203, 0x5d14ac9072685631ULL, 0xb4633b642da54747ULL },
            { L_,  204, 0x3d52f735ebcbe3dbULL, 0xaa969b877e47ec80ULL },
            { L_,  205, 0x94286ace9b3bddfdULL, 0xa754a5efa79ae2f1ULL },
            { L_,  206, 0x0e52371331437b90ULL, 0xfd2e5281f699bf0fULL },
            { L_,  207, 0x72e3c2a30400f57bULL, 0x66fdd0d9293b6bd9ULL },
            { L_,  208, 0x2ab7addad52d9a43ULL, 0xd2fb87d7746c20d6ULL },
            { L_,  209, 0xc35d496a41e79dd5ULL, 0x2fe2823352c48655ULL },
            { L_,  210, 0x1930b2f0d35b375aULL, 0xe827b2ecfe2098c5ULL },
            { L_,  211, 0x673db592370d0584ULL, 0x621921dcca7a9100ULL },
            { L_,  212, 0x4359aeac618b2fdcULL, 0xdb5f956c912ae635ULL },
            { L_,  213, 0xd137fab118c8db81ULL, 0xe79f98b02d6b82cbULL },
            { L_,  214, 0xa41d0bf96afb4274ULL, 0x0fa78f6912000efdULL },
            { L_,  215, 0x2f3b2acf729ae87eULL, 0x044780712d9abc66ULL },
            { L_,  216, 0xf616e1f80f1250d2ULL, 0x0f140c5677f7083cULL },
            { L_,  217, 0xe0f1e15d48277749ULL, 0xffff2aa4309e5259ULL },
            { L_,  218, 0x9d874788878a1558ULL, 0x0362fc9b4318cfbaULL },
            { L_,  219, 0x5acc837ae8a02dd0ULL, 0x73112434076c4e5cULL },
            { L_,  220, 0x4d57309e855619adULL, 0xf5cb11ca8f554a23ULL },
            { L_,  221, 0x6a1414b110071835ULL, 0x779a56078337195aULL },
            { L_,  222, 0x6e667fa4d68296acULL, 0x464d5bd287c6bc71ULL },
            { L_,  223, 0x5327e114898a7deeULL, 0xe076e35f141f9e9dULL },
            { L_,  224, 0xf0c19cad37f94eb0ULL, 0x32551aafbb4c9392ULL },
            { L_,  225, 0x72212619b4718ae8ULL, 0x20d8cc526fd5b622ULL },
            { L_,  226, 0xef36f928be89635eULL, 0x42d26365323f0502ULL },
            { L_,  227, 0x01d4fff602b4a146ULL, 0x34a1ac32106bbafbULL },
            { L_,  228, 0xd3580a70ec675327ULL, 0xa473b8b39ae4250fULL },
            { L_,  229, 0x97fc10c2d900c1beULL, 0xd6b6a37931a221d4ULL },
            { L_,  230, 0xad9667d6a1d3a0b0ULL, 0xdd49486975cd132cULL },
            { L_,  231, 0xcd2cf1b86ae8339eULL, 0x35d7d41bfdba0ff8ULL },
            { L_,  232, 0xdb61d83de5a72ad3ULL, 0xd3565e7daf08eb27ULL },
            { L_,  233, 0x6c64e9f7c0048a32ULL, 0x6b6d093f84d0b169ULL },
            { L_,  234, 0x46f3762fc3a96840ULL, 0x4fd771e8816a2663ULL },
            { L_,  235, 0x09255731238c5d2dULL, 0x78dddc942be23d55ULL },
            { L_,  236, 0xcc895e6f6b1f0449ULL, 0x92922dcc5c8f4656ULL },
            { L_,  237, 0x93f1d4ccffbfe225ULL, 0x1d8f8097ecadf4d0ULL },
            { L_,  238, 0x70175bb77260c209ULL, 0xefb24a367011499dULL },
            { L_,  239, 0x614ca88c6c128c1fULL, 0xcd8c45059d3143ecULL },
            { L_,  240, 0x782ed228bba8e266ULL, 0x4a1c13a2fdaa7bf6ULL },
            { L_,  241, 0x99de26db85b1a1fdULL, 0x5119e1d5d8af52e9ULL },
            { L_,  242, 0x270b0bfaf274210bULL, 0x4b36c1bca6fbb8f0ULL },
            { L_,  243, 0xd256c7877f4974f5ULL, 0xd23eb1b7f2ce5321ULL },
            { L_,  244, 0xd8e5b5a16ed7896cULL, 0xfe6e33d4bdbb65e9ULL },
            { L_,  245, 0xc9b6ffacaaffcd41ULL, 0xf9530b2f4ba38093ULL },
            { L_,  246, 0x959edeed979cab47ULL, 0xd387c581108b8a35ULL },
            { L_,  247, 0x4b647a8083734398ULL, 0x50c08ddff67c5985ULL },
            { L_,  248, 0xd8658e3c0232a1d8ULL, 0xe5bac3a93f55ce79ULL },
            { L_,  249, 0xff03f4bf7dc7d0feULL, 0xcdbe833e21b9ccdcULL },
            { L_,  250, 0x2f1d36d299dbedc3ULL, 0x4b49437b15f9c645ULL },
            { L_,  251, 0xbb6ed5199c4000baULL, 0x8071d8a4d78ab59aULL },
            { L_,  252, 0x7141d0b81f43a7d6ULL, 0x5533907a08d1a966ULL },
            { L_,  253, 0x17722f3b7a08a494ULL, 0x0c7af6723c8da0a9ULL },
            { L_,  254, 0xf5d52e7063e0f6d6ULL, 0x611e00c9acf05df6ULL },
            { L_,  255, 0x57be14a0ebbb6339ULL, 0x5303d418ca7a21b5ULL },
            { L_,  256, 0x85b2491aaa40f179ULL, 0xff2bcebfacc3dfd3ULL },
            { L_,  257, 0x0edb9d1a4f1ea9adULL, 0x2900de8bc3ecdadbULL },
            { L_,  258, 0x6b969a7e7de6d1c4ULL, 0xf45546f60bf4c134ULL },
            { L_,  259, 0x6890c8eaed7a0377ULL, 0x91ae5fe71e59b5acULL },
            { L_,  260, 0xbf9005cddabb57a9ULL, 0x2b91a3e238bafd78ULL },
            { L_,  261, 0x19780f39d8642b3bULL, 0x4a98bb4688283bcfULL },
            { L_,  262, 0x0797e33e6ccca4d1ULL, 0x87051c6fe0408135ULL },
            { L_,  263, 0x373f1900188b2581ULL, 0x5a430ca0b40e77dfULL },
            { L_,  264, 0x1dde6867593201a5ULL, 0x31f8bfe04f4d82eeULL },
            { L_,  265, 0x4b6827f6ae635634ULL, 0xbe8b82e4496552f5ULL },
            { L_,  266, 0x38b5f38076c3ebf1ULL, 0x3d65e672189d9acfULL },
            { L_,  267, 0xffccbe1e3a4ba08bULL, 0xed72a50d383302e6ULL },
            { L_,  268, 0x820c430e8e8b5582ULL, 0x55b8f0f5559ec0daULL },
            { L_,  269, 0xeb7924f8255ec61bULL, 0x03fb3d732dec6a06ULL },
            { L_,  270, 0xb709dc76e1f0a658ULL, 0xbe3b6196a564d02fULL },
            { L_,  271, 0xedbe34edc32936afULL, 0x758e3a1571c651c8ULL },
            { L_,  272, 0x876419d4b7fd9fbeULL, 0xa48baf4b2c22dfcfULL },
            { L_,  273, 0xa172b8d6e956e944ULL, 0x47e569655cda2688ULL },
            { L_,  274, 0x70c8c03579c7374eULL, 0xa291ddac84d5fb82ULL },
            { L_,  275, 0x0ae7812766a80fdfULL, 0xb72280c89154aab8ULL },
            { L_,  276, 0xf4eb1019f3f56133ULL, 0x4d374ba830af654dULL },
            { L_,  277, 0x893c98fac207e143ULL, 0xefa6e48d6c8cbf68ULL },
            { L_,  278, 0xfd2705812ad2058dULL, 0x194b76779968f56aULL },
            { L_,  279, 0xba687bc978befdb9ULL, 0xc1666a658c044c5dULL },
            { L_,  280, 0xda879aa1b6adf568ULL, 0x4462c6fb308736efULL },
            { L_,  281, 0x14e7fb0b97e4d9faULL, 0xc9c4cc037143170aULL },
            { L_,  282, 0x65abd027edf89048ULL, 0xca0f2e73149f7c05ULL },
            { L_,  283, 0x504b0df20a767159ULL, 0x29732d90df72e67dULL },
            { L_,  284, 0xc7894d2b085b0f54ULL, 0x259c5b67e0a538f2ULL },
            { L_,  285, 0x867242c071e41055ULL, 0x6aaf821112e25d1aULL },
            { L_,  286, 0xcdcee199b7fe29cdULL, 0x72ac304c83af65a1ULL },
            { L_,  287, 0x05b296be6fe8b43fULL, 0x09bf837456e7688dULL },
            { L_,  288, 0x7c806854c02408c9ULL, 0x3f1e8d1a813c5b38ULL },
            { L_,  289, 0x2dd67134e30f029bULL, 0x3bca736fad5bc158ULL },
            { L_,  290, 0xcb296c2874a345c0ULL, 0xc9b06a442558c3ffULL },
            { L_,  291, 0x6e1071bfce5ba216ULL, 0x09e7ff1d18f16d92ULL },
            { L_,  292, 0x6f255e19cfe144c1ULL, 0x91d990e3f9d5358aULL },
            { L_,  293, 0xe7499bc2b67dbcd3ULL, 0x9029c82ca1ffb884ULL },
            { L_,  294, 0x3221d1e0cfa302a4ULL, 0x3faa9e6807c792dfULL },
            { L_,  295, 0x04252a20ad547febULL, 0xef10117821e5be1cULL },
            { L_,  296, 0xd4865de81cc0b806ULL, 0xdaba08979c16c44eULL },
            { L_,  297, 0xd3ca05c2477c38ecULL, 0x39f8e182a1afca2cULL },
            { L_,  298, 0x2757ca206830e1efULL, 0x10c121042e0eb3c1ULL },
            { L_,  299, 0x9d372987ac033fd1ULL, 0xa2a55a21c1cbcc82ULL },
            { L_,  300, 0x1b8e7dfb5241a844ULL, 0x18ba25b70719b4d8ULL },
            { L_,  301, 0xa0ff7c12011c0cfeULL, 0x06c5af1d9baa7000ULL },
            { L_,  302, 0x214216517d318dfdULL, 0xd4b7f062f065e53aULL },
            { L_,  303, 0xce403512a10f4ad5ULL, 0xef04d3128e153870ULL },
            { L_,  304, 0x3f4f9c8eb4a3085eULL, 0xdd832fe14bcec1bcULL },
            { L_,  305, 0x7b2cf021565c3ffbULL, 0x2136385b8a81d691ULL },
            { L_,  306, 0xcc221a74eb74d774ULL, 0xe7e09bdf9e8c9fdfULL },
            { L_,  307, 0x3aaa8a21c3428ce3ULL, 0xa08f645b0935f80aULL },
            { L_,  308, 0xea242d1fd5a8c3feULL, 0xbb7083e1c502fb6aULL },
            { L_,  309, 0x9c4f4c0d516f22d7ULL, 0x155125a236321e99ULL },
            { L_,  310, 0x2baaf1b58e8eb283ULL, 0xb766458aac05eb99ULL },
            { L_,  311, 0xa7b2e0f4ba6a8378ULL, 0x8a18f435b4bc71daULL },
            { L_,  312, 0xc709d82190788d34ULL, 0x19b0c64f45ab2945ULL },
            { L_,  313, 0x5521fb0275604836ULL, 0xb9ee6d9d3f307a21ULL },
            { L_,  314, 0x1ea09bb3eca215f9ULL, 0x3079bcf545cf2bafULL },
            { L_,  315, 0x58c8793083ad13fbULL, 0x110b30f3881ae475ULL },
            { L_,  316, 0xd19bb512d6ee2850ULL, 0xe7a02378ece143a3ULL },
            { L_,  317, 0x62a297857207c76fULL, 0x8e65888001e1e821ULL },
            { L_,  318, 0x7a001e3f1d891192ULL, 0x71e3f71e0e85c81cULL },
            { L_,  319, 0x66927a7d3d96d7b0ULL, 0x4494807475f33c40ULL },
            { L_,  320, 0xc9dfb9c3ef8bf20bULL, 0x4a985b23996c2897ULL },
            { L_,  321, 0x378803654792ceeaULL, 0xd2b32431e5ad4654ULL },
            { L_,  322, 0xa970932be223fcfeULL, 0x3e324e11730c9b2cULL },
            { L_,  323, 0xaa86850f9bdbad1dULL, 0x2837cd090b03cb81ULL },
            { L_,  324, 0x38ceba4c0435a00fULL, 0x3b1d3cd102c72f7bULL },
            { L_,  325, 0x7772123047e6d715ULL, 0x8c8c05f0b7cf6bbeULL },
            { L_,  326, 0x6225bfe2b2a9d62cULL, 0x901b8dbc224d4cbcULL },
            { L_,  327, 0xfa7ec4e522bc73f5ULL, 0xbea26debb4a20a01ULL },
            { L_,  328, 0x58ee89982ec92929ULL, 0x3bc660c5f55f2ec7ULL },
            { L_,  329, 0x40570c2457151b90ULL, 0x4f2ec49ce790d967ULL },
            { L_,  330, 0xfdd1ba14ed16a1d7ULL, 0x3817292f4408dc0eULL },
            { L_,  331, 0x4cb14484174bd45eULL, 0xe3995d9a3779e203ULL },
            { L_,  332, 0x29a6d9febe46bedeULL, 0x153e20fa2b348737ULL },
            { L_,  333, 0x7853d7c2bcd1fb85ULL, 0xc7d052b0734d2e5cULL },
            { L_,  334, 0x734f8d1b55fe7297ULL, 0x576ed50318ab0753ULL },
            { L_,  335, 0xc002874eaee532baULL, 0x64b499cf66585583ULL },
            { L_,  336, 0x66d7630bf4a335c6ULL, 0x1763418e78662638ULL },
            { L_,  337, 0xabdfe10efbfcbe08ULL, 0xe0c3b99d8fcd36deULL },
            { L_,  338, 0xf45e483c882f584bULL, 0x8dae946c0d81710eULL },
            { L_,  339, 0xe73d94a5b101e1d5ULL, 0xf966debe0640c80bULL },
            { L_,  340, 0x93dcee828a2b71caULL, 0x95f3f27dd45f143fULL },
            { L_,  341, 0xd0b46f06bd34c4bcULL, 0xcad1f138e2729240ULL },
            { L_,  342, 0x09897e95adeae375ULL, 0x3067d54e16868540ULL },
            { L_,  343, 0xcaf5d410fdc6eecdULL, 0x1cb68389c746b031ULL },
            { L_,  344, 0xcf1bc84d3c55fe74ULL, 0x632263fbc652a039ULL },
            { L_,  345, 0x4f5389f9dd1fcd10ULL, 0x4907abe135421bb0ULL },
            { L_,  346, 0xf288762820d2446fULL, 0x7bf7f30bd1b81806ULL },
            { L_,  347, 0x85f86110028b420cULL, 0x2af79058eee830d4ULL },
            { L_,  348, 0x62f4599f587db062ULL, 0xdf93e66ae1e321d5ULL },
            { L_,  349, 0xc34a740362785849ULL, 0xe9ed93a155978f31ULL },
            { L_,  350, 0x37c729f375380cb6ULL, 0xe0105a3ac1296f96ULL },
            { L_,  351, 0x6f76aa0b20514cf9ULL, 0x093706136a2a3081ULL },
            { L_,  352, 0xe231a96560fdf887ULL, 0xfed5d266a47011ffULL },
            { L_,  353, 0xf0eba5d7804e8f46ULL, 0xd28554c26817f3daULL },
            { L_,  354, 0x8c640acc9bfcb1adULL, 0x0dac5efed9caf44fULL },
            { L_,  355, 0xccb15e7dc602e2aeULL, 0x6814cc1909e658d2ULL },
            { L_,  356, 0x1f87e2d207733164ULL, 0x48d0d0cd4f457b99ULL },
            { L_,  357, 0x4f307437aa17a8cdULL, 0x4c112a1267494415ULL },
            { L_,  358, 0x2daa1b77f30c8bbaULL, 0xcef192d28371cf6eULL },
            { L_,  359, 0x81982ab2b180446cULL, 0x6544985f86168897ULL },
            { L_,  360, 0x6807d83b5df952c3ULL, 0x2f6303375440b39bULL },
            { L_,  361, 0xadb757c28309315eULL, 0x2a591ecad35a76cbULL },
            { L_,  362, 0xbb4f1ea48d3c047aULL, 0xb0b0cb5147b570daULL },
            { L_,  363, 0x6fb7f257103037f3ULL, 0x617ee96e955f5e53ULL },
            { L_,  364, 0x3d1593f0ad8c909fULL, 0x12736a7c8c272581ULL },
            { L_,  365, 0xf6a7614472e47404ULL, 0xcc6acea36a318ebfULL },
            { L_,  366, 0x24c70e62b701e9c5ULL, 0xce704ddba17094b3ULL },
            { L_,  367, 0x58e669164897f7c3ULL, 0xf0d179548e5649e6ULL },
            { L_,  368, 0xa4fe7e3efd534b8bULL, 0xed7683887f2fe15cULL },
            { L_,  369, 0xbce61ce2bcb483d3ULL, 0x22c7e0f1b8813c0dULL },
            { L_,  370, 0x3e9356c5733ac867ULL, 0x79c019258daa322aULL },
            { L_,  371, 0xf865b25a363db4c3ULL, 0xa1da1a2811938496ULL },
            { L_,  372, 0x3197be80bcb6d4d3ULL, 0x14e25d3866ba7171ULL },
            { L_,  373, 0x659d0ffa544cc8d6ULL, 0x9646962377ed47e6ULL },
            { L_,  374, 0x10c9ce2d388d8195ULL, 0x7d513decd08398cbULL },
            { L_,  375, 0xbfd2537c60195eccULL, 0x5bd67156494bb517ULL },
            { L_,  376, 0xaebf88d048e83c54ULL, 0xc1f0d9b3aeb64246ULL },
            { L_,  377, 0xb3096cc0a38d3afdULL, 0xb16d5e6ee8e26ddfULL },
            { L_,  378, 0x310c7aa754025444ULL, 0xdd1fd6282761e50fULL },
            { L_,  379, 0xc0d7d6d2754469deULL, 0x915c16e8a56d17a5ULL },
            { L_,  380, 0x2c90284d98359638ULL, 0xb3429907d5fd6b42ULL },
            { L_,  381, 0xbb4b188b1e2218aaULL, 0xdf6f2b00f4b08a21ULL },
            { L_,  382, 0x849cb80b7e0e3a11ULL, 0xb7adc57d8013b1c9ULL },
            { L_,  383, 0x2cc4e8aed744a16aULL, 0x915f7e8dc94aeeefULL },
            { L_,  384, 0x385d686ca4ed4cf6ULL, 0x0b996207fc5536d7ULL },
            { L_,  385, 0x368c531dc27602eaULL, 0x4ae9b8e491ff1574ULL },
            { L_,  386, 0x49faebbf86014f5cULL, 0xf2864929437d6513ULL },
            { L_,  387, 0x5997a076a5b7d207ULL, 0x82939047e8f321c9ULL },
            { L_,  388, 0xeeca5773c6434cb8ULL, 0xe5969a0e7090286cULL },
            { L_,  389, 0x462ed9012c41a37eULL, 0x40129ff9842b7148ULL },
            { L_,  390, 0xb5e3db7433b5219dULL, 0xd2f97b9e9bedcbfaULL },
            { L_,  391, 0x95b55c9d592b566bULL, 0x076856f89e23e26bULL },
            { L_,  392, 0xf8961a51a3bc2a75ULL, 0x28f4fadafeb35c17ULL },
            { L_,  393, 0xd5ed5f2644fdad79ULL, 0x4f9c078d367b3284ULL },
            { L_,  394, 0xed325d00108e3923ULL, 0xb55f8a3a2872c971ULL },
            { L_,  395, 0x580b4b71f74579d8ULL, 0x2723f61d9e6e490eULL },
            { L_,  396, 0x17aa9b3dd7d3977dULL, 0x6c67272eaeb52c97ULL },
            { L_,  397, 0x02809e0e04b73796ULL, 0xe203889dab5c2d25ULL },
            { L_,  398, 0x4df61fe8ea3860f4ULL, 0x94e1fd6ceafae483ULL },
            { L_,  399, 0xe02958959616f814ULL, 0xd1a422e3c9915a76ULL },
            { L_,  400, 0xd4882c540711d6d3ULL, 0x81927a9f63ce3f85ULL },
            { L_,  401, 0x022853b516e05a02ULL, 0x85363c8986e5a8f7ULL },
            { L_,  402, 0x3127a47476082844ULL, 0x5a415230f7f31ecbULL },
            { L_,  403, 0x1955bb8c2ddf2687ULL, 0x3284cb09d613a4c4ULL },
            { L_,  404, 0xe766f1a45ce5cfc6ULL, 0x03248a700b1a165aULL },
            { L_,  405, 0x3176508985c0cb38ULL, 0x9f438ced7b7f79a5ULL },
            { L_,  406, 0xeaba4b64d06978f3ULL, 0x8964c860acf620deULL },
            { L_,  407, 0x1fdcf5dd328f3701ULL, 0x3416dc4ae568edd0ULL },
            { L_,  408, 0x59bc174422c14fcfULL, 0x640d9a63da364356ULL },
            { L_,  409, 0xbfc955453608b146ULL, 0x8dea3978227b0298ULL },
            { L_,  410, 0x5a6fbb5e71971d84ULL, 0x3e915bc11dbbf844ULL },
            { L_,  411, 0xf36839524f0a3332ULL, 0xe1ae015d174cc265ULL },
            { L_,  412, 0xcd4f13f275b7518fULL, 0xbf74340fa476db03ULL },
            { L_,  413, 0x0a90df4f23524615ULL, 0xc67b91aa9e50d0d5ULL },
            { L_,  414, 0x3428dfb5e76233a4ULL, 0x4855ea1f1b358fb9ULL },
            { L_,  415, 0x047fd3e49222fde3ULL, 0x2f60739444e0795aULL },
            { L_,  416, 0xe6cf57fe07a3f4afULL, 0x79c836eedaa70f67ULL },
            { L_,  417, 0xb81771d3e4fc7709ULL, 0x27d229c612611df4ULL },
            { L_,  418, 0x660ddb84b97be4ffULL, 0x3f29d9e1c02a29eaULL },
            { L_,  419, 0x9b46518fe33784b7ULL, 0xb2b6bc699b0ae0edULL },
            { L_,  420, 0x697ff97f49b5a53cULL, 0x65b6c3f2e163f5daULL },
            { L_,  421, 0x888bf58c16c63d11ULL, 0x7da8c54149be7d29ULL },
            { L_,  422, 0x16731197a3fdf8f4ULL, 0x0706ca34ebcc6bb2ULL },
            { L_,  423, 0x3df85716eb289812ULL, 0x7c0436f50ac13695ULL },
            { L_,  424, 0x5be7b22c9bb1c5c9ULL, 0x33bb039744f06072ULL },
            { L_,  425, 0x47bfef8ac11e96c0ULL, 0xf2b9cbe966668c85ULL },
            { L_,  426, 0x9f796a6254ad7bccULL, 0xa105bd6d1d839d6dULL },
            { L_,  427, 0x0d0f57a598b1a592ULL, 0xd548d010ad358bbdULL },
            { L_,  428, 0xd7722d52e7c518adULL, 0xcf7c7c3d6bdabdf1ULL },
            { L_,  429, 0x446e68555952fccaULL, 0x5e646834613e803bULL },
            { L_,  430, 0x0aa2df6924015d70ULL, 0x1f40fa36dfcf8fd8ULL },
            { L_,  431, 0x42fb255c56a811fdULL, 0x22bb897a3fa72dc4ULL },
            { L_,  432, 0x0373453067d240cbULL, 0x7e5a054008f7e457ULL },
            { L_,  433, 0x93590ffb62b21ca0ULL, 0xa190f5dcd204e4d1ULL },
            { L_,  434, 0x65fc8441d593d090ULL, 0x52e1a52625bfd7abULL },
            { L_,  435, 0x68a44db2b94da3cfULL, 0x90137f8463e93aabULL },
            { L_,  436, 0x8b523fdb50089a3fULL, 0x8d9174f1a65be5ecULL },
            { L_,  437, 0x56616ad96ec25c3bULL, 0xa950ac00e6705c79ULL },
            { L_,  438, 0xd7c5eb4f163fa20aULL, 0x7cc21e5c0207b568ULL },
            { L_,  439, 0xd2bac4f8e4f39546ULL, 0xe16f0b1ce0606ae6ULL },
            { L_,  440, 0x80412703babfb1d2ULL, 0xf44a38e0d0e95854ULL },
            { L_,  441, 0x473dc3a4c407a6c7ULL, 0xfaecad39948f5e46ULL },
            { L_,  442, 0xb6003e9b5118547dULL, 0xe2f1f1755af8353dULL },
            { L_,  443, 0xc9ae350f64c32827ULL, 0xcfaf9cf318d50bdeULL },
            { L_,  444, 0x63770b25d5d71dc6ULL, 0xec6a19a7a3d5f747ULL },
            { L_,  445, 0x91ac673f437f4bc2ULL, 0x8239911b917a6e63ULL },
            { L_,  446, 0xc20d5a2d32548515ULL, 0x1c7f34c15c4eeb9bULL },
            { L_,  447, 0xaaed049a09d24be5ULL, 0x78f9630fa9f180cbULL },
            { L_,  448, 0xd0d6770bc46d6768ULL, 0x9207eba14e455e3bULL },
            { L_,  449, 0x9ce6b5e14dcd8b04ULL, 0xc2b1e4138bdf2692ULL },
            { L_,  450, 0x07011e7ef32a1d64ULL, 0x04ec0c184c2ec23eULL },
            { L_,  451, 0x9834c479e7656680ULL, 0x437f23ee8978fa67ULL },
            { L_,  452, 0x37893eb7849b3744ULL, 0x13ba7aca7cf7b2f5ULL },
            { L_,  453, 0xac80737a62007565ULL, 0x04934307fb5d217fULL },
            { L_,  454, 0x9908f6a8e83040f9ULL, 0x687ef80efa7190baULL },
            { L_,  455, 0xaee587a7b1786651ULL, 0x917b1f773285dad0ULL },
            { L_,  456, 0xf74b3373e86ccd27ULL, 0xf5159c8b23a2e34bULL },
            { L_,  457, 0x001c131bede520ccULL, 0x190c51d2550134b2ULL },
            { L_,  458, 0xa4e764043880acfdULL, 0x91b8ca325087c5a9ULL },
            { L_,  459, 0x8d91d4b79016e460ULL, 0xf826decee6d80749ULL },
            { L_,  460, 0x3f22a119e6bd0285ULL, 0x0030b34e464c4bb8ULL },
            { L_,  461, 0x8ea065ea0d187338ULL, 0xb99b15dd64d2df38ULL },
            { L_,  462, 0x466e6c098cb1d681ULL, 0x9ad4837fd8bd0ecbULL },
            { L_,  463, 0x3726d3565679a16eULL, 0x624cf0ee9d12ed5dULL },
            { L_,  464, 0x272012bff0f9f889ULL, 0x81f0ad8eb5138187ULL },
            { L_,  465, 0x2f27b3224a5b0458ULL, 0x4067779d0df33a43ULL },
            { L_,  466, 0x469f8ee213e1d801ULL, 0xc04f3cc0355521bcULL },
            { L_,  467, 0xc4d221a0b5dafcd2ULL, 0x1636418551f3203fULL },
            { L_,  468, 0x2497ec656757a783ULL, 0x5a4965ff94cfc8e2ULL },
            { L_,  469, 0x75595e17ea20d71aULL, 0xffff2049de93286eULL },
            { L_,  470, 0x2e58c8b32446515cULL, 0x80fcbb59ab8662a0ULL },
            { L_,  471, 0xd289511cfeafb6d9ULL, 0x12b7e8d5f13fb620ULL },
            { L_,  472, 0x4582f15fbeda2d91ULL, 0x4ad088930e04cd83ULL },
            { L_,  473, 0xd389b954fa84551dULL, 0xbf3284d1588533bdULL },
            { L_,  474, 0xda31b8a2d7c91d54ULL, 0x3abd0a121e56bd7dULL },
            { L_,  475, 0xd475dcbe52983544ULL, 0x094c468c8667868cULL },
            { L_,  476, 0x1b5760fc3741a2dfULL, 0x4d6be08f6340a19cULL },
            { L_,  477, 0xc5c2014c560d2008ULL, 0x6c01c6b22f213b4cULL },
            { L_,  478, 0xf61ff0ccf26b10f0ULL, 0x72ed36ec4781ff3fULL },
            { L_,  479, 0x7c20d1c1942088a3ULL, 0x96e0886983ac6e56ULL },
            { L_,  480, 0x4db47234b7cb6c3dULL, 0xbc9997bc962b42c9ULL },
            { L_,  481, 0x72896c7224efe834ULL, 0xd0c18bdc05225c91ULL },
            { L_,  482, 0x5f060577ebce73eeULL, 0x6d3adbbac5654a78ULL },
            { L_,  483, 0x5b944a5f45012436ULL, 0x7687594e273a7e63ULL },
            { L_,  484, 0xf963bc1258c4279aULL, 0xe668042332191b78ULL },
            { L_,  485, 0x8b66c3de35b2fee9ULL, 0xb22b7f97fefe4fb7ULL },
            { L_,  486, 0xac121adc744c1758ULL, 0xd4ac10d100f7ba48ULL },
            { L_,  487, 0x71577a2f20641aa5ULL, 0x37434bba667c8d32ULL },
            { L_,  488, 0x12b326de475dbde8ULL, 0x321cd740b3265142ULL },
            { L_,  489, 0x87bec4a0455a0cbbULL, 0x474e714c7a1a5913ULL },
            { L_,  490, 0x55f6196bde8d2b8eULL, 0x64b92762c585aea3ULL },
            { L_,  491, 0xeeb842a9d2a17712ULL, 0x8947d5f439193476ULL },
            { L_,  492, 0x8a4f40b62706bd6fULL, 0xdcf6a3f2cc07d0abULL },
            { L_,  493, 0x1062e9fb7d24f9dcULL, 0x38366bb3361321b0ULL },
            { L_,  494, 0x611c6327eb0d360bULL, 0x31bf6d64db035623ULL },
            { L_,  495, 0x8ceb3ddabea4092eULL, 0x1371c480571ba223ULL },
            { L_,  496, 0xd2599b1bedd6cf71ULL, 0x633e81dbed70dae4ULL },
            { L_,  497, 0xa1bcbf93a7162fd2ULL, 0xd328fb6a934ce924ULL },
            { L_,  498, 0xb7761e0cc082b935ULL, 0x009eaaab8ca3fc76ULL },
            { L_,  499, 0x720eea115b32bc55ULL, 0x5d130dbadde7dc65ULL },
            { L_,  500, 0x8eb21d82507a0106ULL, 0xbc2f8c08ca7c3dfaULL },
            { L_,  501, 0x89bf7f259b46f226ULL, 0xea313de2a54745e8ULL },
            { L_,  502, 0x211833fa48e1723cULL, 0x24fc11339c889882ULL },
            { L_,  503, 0x90d0e94a2cd7fbafULL, 0xeb22e7c00279c5fdULL },
            { L_,  504, 0x8672a4cd03a478caULL, 0x49647192e2b1a809ULL },
            { L_,  505, 0xeaa0b57ffa14f896ULL, 0x4800441d59ea760eULL },
            { L_,  506, 0xabbc89405c0a35eeULL, 0x64e7682bada1c5cbULL },
            { L_,  507, 0xe647332f6a105f53ULL, 0x1e7e4bed99bf8874ULL },
            { L_,  508, 0xed5b9869fcd7a289ULL, 0x6ffa72c999ccad3aULL },
            { L_,  509, 0xc483c123a758926bULL, 0x1941bdfd46ee86ecULL },
            { L_,  510, 0xe31f26ab00be7f44ULL, 0xa06b14dd4fe745a5ULL },
            { L_,  511, 0x491ab263aeb7890eULL, 0xd1fc0241c2bc5e69ULL },
            { L_,  512, 0x463669ebf27cf93dULL, 0xb60031c94b28cbb6ULL },
            { L_,  513, 0x1c7adcc186a22605ULL, 0xab3d0553256b60c0ULL },
            { L_,  514, 0x6a6c8d6903eb0a85ULL, 0xaa1cca4d3b248f27ULL },
            { L_,  515, 0x527645835f2ae529ULL, 0xc39f025fc90b2acdULL },
            { L_,  516, 0x8f780efea3b06a93ULL, 0x1fabc2993d24975cULL },
            { L_,  517, 0x615c01a8ae82783eULL, 0xe2472ea87c7d35d7ULL },
            { L_,  518, 0xc6f9716c4678c39cULL, 0x86a0327efe3b4383ULL },
            { L_,  519, 0xb726b96d886d4838ULL, 0x169fc86e9a66d6f9ULL },
            { L_,  520, 0xbbae8f53afb05641ULL, 0x5aedb896d31524c4ULL },
            { L_,  521, 0x1c6376ee011fc4b0ULL, 0x8698c3a2027f488fULL },
            { L_,  522, 0x206ea722684eeb75ULL, 0xdd08701ca2ea2011ULL },
            { L_,  523, 0x447fd1d41cade94eULL, 0xabe71f6f2ef68a68ULL },
            { L_,  524, 0xd0ec2d832e624c15ULL, 0xba6f9b65ff77e33dULL },
            { L_,  525, 0xf1ed5aaed7ef0fdbULL, 0xa5e8b24b9210e25aULL },
            { L_,  526, 0x70f490282698900bULL, 0x7bee9d6761c9be34ULL },
            { L_,  527, 0xfd99ed795101bd32ULL, 0xe1c856d4d5a6e483ULL },
            { L_,  528, 0x0917e86d449576acULL, 0xb7aab852a910e01cULL },
            { L_,  529, 0x993f2d4587c2cb10ULL, 0x7d91848667fd6f74ULL },
            { L_,  530, 0xf032a0809817043dULL, 0x52706704ef304b06ULL },
            { L_,  531, 0x178e8967e3337c9fULL, 0x97a734bd18f951baULL },
            { L_,  532, 0x4e6ac6ba37052891ULL, 0xfb2d8154e66dd496ULL },
            { L_,  533, 0x7d31bdf510fc2c50ULL, 0x794ffe556d877711ULL },
            { L_,  534, 0x8a467d26d388d4e0ULL, 0xc5d2f2cbd3372b29ULL },
            { L_,  535, 0xd31e475b9c204f1dULL, 0x9413e3d3964ca47cULL },
            { L_,  536, 0x4c4453e8c7774b0fULL, 0x2cc76b943c1c7f47ULL },
            { L_,  537, 0x627c26f77b160223ULL, 0x5c6ab4983fffe39eULL },
            { L_,  538, 0x118ef9dfefbea739ULL, 0x8d913cde82da1a6dULL },
            { L_,  539, 0xfaced4313bd343f1ULL, 0x2eb17f72a9cb09d8ULL },
            { L_,  540, 0x5149e102953e446cULL, 0x927be36bb5fb2888ULL },
            { L_,  541, 0x4841e01d521be594ULL, 0x5f5ab238065ca072ULL },
            { L_,  542, 0xe852976093c2b74bULL, 0x932fa4121e74a305ULL },
            { L_,  543, 0x56a1604063ffb301ULL, 0x7abbb955cecef203ULL },
            { L_,  544, 0x9a0a08cf11e259efULL, 0xc3ffe31fced0584fULL },
            { L_,  545, 0xfd06cc2f6cfa43a2ULL, 0x843ea79bfa861759ULL },
            { L_,  546, 0x449aad6e2e40644eULL, 0x3ee64f3640e027d8ULL },
            { L_,  547, 0xc5762d25be5dd4c9ULL, 0x1d1cc754940b7a73ULL },
            { L_,  548, 0x1c92424cc1a368a6ULL, 0xb88e2d7848d8e225ULL },
            { L_,  549, 0x11469283c018d8c0ULL, 0xac9903686fd0848fULL },
            { L_,  550, 0x0e7eb0576d6e8acbULL, 0x55ad340d07921321ULL },
            { L_,  551, 0x5c14890255596219ULL, 0xddca04ea9650ff4fULL },
            { L_,  552, 0x28520acc7990317fULL, 0x6018f02c41e1d054ULL },
            { L_,  553, 0x57b597f34b55efa8ULL, 0xc06f3d6b1be3f2e9ULL },
            { L_,  554, 0x2fca3e952a6a4b6aULL, 0x2b9faced9f310fd4ULL },
            { L_,  555, 0x37fb119956f2cf54ULL, 0xe488baa5c0497c50ULL },
            { L_,  556, 0x0f93b4c1390bc97aULL, 0xbe7880ce8b2eb595ULL },
            { L_,  557, 0x2d8080423a575dd4ULL, 0x8582c56f2bffdc92ULL },
            { L_,  558, 0x547cc68f61cfc9e0ULL, 0x39382ff06fdc3b1bULL },
            { L_,  559, 0x18d5bede15e7f1b6ULL, 0xffb12720dd65f364ULL },
            { L_,  560, 0xc819e3c370e59150ULL, 0x2ac1438c7c202025ULL },
            { L_,  561, 0x0997fc245248a121ULL, 0xd27c1c98e6352ff8ULL },
            { L_,  562, 0x300d92611591da67ULL, 0x5dff8bd33649cf38ULL },
            { L_,  563, 0xd1b17dda25a6aea9ULL, 0x2a1b982f96cfd9a9ULL },
            { L_,  564, 0x59e378cc820b7d7dULL, 0xcd2c04a9cbbb0921ULL },
            { L_,  565, 0xda0f8de17022fa36ULL, 0x58554625e53eb5dfULL },
            { L_,  566, 0x264c2a3725a2474dULL, 0x53cd6c4d40ee3fa9ULL },
            { L_,  567, 0x809d6ae0401a57ccULL, 0xc9a07ccad5af9b12ULL },
            { L_,  568, 0xc9cc5e1c3e47f143ULL, 0xfbedd1b27904f4c0ULL },
            { L_,  569, 0x2800e6556718b99aULL, 0xd27b4faf65c3c585ULL },
            { L_,  570, 0x0edad155f5f27435ULL, 0x2c7c70ee4ba14959ULL },
            { L_,  571, 0xc99f5ad0c3c63383ULL, 0xa05789e2f9a9aa1eULL },
            { L_,  572, 0x9e00cfef302b697fULL, 0xccb555a8cb9cc419ULL },
            { L_,  573, 0xd047a193a55c5c98ULL, 0xd997033be934d133ULL },
            { L_,  574, 0x272403e50251bf8fULL, 0xcabb65a6ab2ae010ULL },
            { L_,  575, 0x7f8b45679ebe54d4ULL, 0xaf83e2c20e57a3d4ULL },
            { L_,  576, 0xa532553c868d686aULL, 0x498c1fdb7e43bee7ULL },
            { L_,  577, 0x2a0b3e3f644bfb91ULL, 0x69521f3ec4810ca6ULL },
            { L_,  578, 0xaeabb67ec9c718e3ULL, 0x7215cef5dec9a202ULL },
            { L_,  579, 0xbbd6b189f06585bdULL, 0x1383b5b8240cfcc7ULL },
            { L_,  580, 0x9b656e72696ddcbbULL, 0x426d07a0f065165aULL },
            { L_,  581, 0x0516f14325c9ebb1ULL, 0xda6094177cf6f0dfULL },
            { L_,  582, 0xbc5ea7554b27512bULL, 0x860f25bda1eb1fcbULL },
            { L_,  583, 0x013fa0439aaf4b84ULL, 0x911036db7b74ba79ULL },
            { L_,  584, 0x735da042d3f80e41ULL, 0xdfcd6eba7405ac87ULL },
            { L_,  585, 0x6aecc01a3280f019ULL, 0xc8e970163ea59be3ULL },
            { L_,  586, 0x0b05761d1e3012feULL, 0x0b486eae8ac5cce9ULL },
            { L_,  587, 0xec07aa266b6527e4ULL, 0xc88be9b3ec0fa301ULL },
            { L_,  588, 0x1fdd9bece2911475ULL, 0xcb1ebe5057dde5efULL },
            { L_,  589, 0x7cd683c9a4972009ULL, 0x646d1c0dfcb39ee8ULL },
            { L_,  590, 0x2819b008e3e375a2ULL, 0x905cae7479bb6ec8ULL },
            { L_,  591, 0xb36029dc60a809c5ULL, 0x24eec6e4f23a1b01ULL },
            { L_,  592, 0x944299f047d948feULL, 0x9df0389960a7fa45ULL },
            { L_,  593, 0x947567da27097e02ULL, 0xd8958dae2376401dULL },
            { L_,  594, 0x533966c7b2749b2eULL, 0x203109542d1db2b2ULL },
            { L_,  595, 0x69bf19fd9e5d0fabULL, 0x53ebc572a0f995caULL },
            { L_,  596, 0x6b8963660cb1ce18ULL, 0x5206ecd7a018d0b9ULL },
            { L_,  597, 0xe63d4781a33da2d9ULL, 0xd00a9ccc0946c314ULL },
            { L_,  598, 0x9d4e0b43d8f5eac2ULL, 0xe917cf63e3ae7b58ULL },
            { L_,  599, 0xc099e2dfba4f9166ULL, 0xe1dde7139d97e28fULL },
            { L_,  600, 0x5fb93b4a5c388dc5ULL, 0x3f126bba308f9131ULL },
            { L_,  601, 0xcc23b07eec7cbf3aULL, 0x444194ad9b2b29d6ULL },
            { L_,  602, 0x934745d33c6af766ULL, 0x34fafcf2160c6548ULL },
            { L_,  603, 0xb92c5c20979907f6ULL, 0xfe31b471b4502f21ULL },
            { L_,  604, 0xe229eb31a86296bbULL, 0x21c63a7bc665363eULL },
            { L_,  605, 0x2dc330752ddd35c6ULL, 0x5aef50decb71ead8ULL },
            { L_,  606, 0xfc47b97510c9088dULL, 0x4bde47e872cbc81bULL },
            { L_,  607, 0x63508fb112fcbe76ULL, 0x99f0bdfa261baa51ULL },
            { L_,  608, 0xadabe8bee2815541ULL, 0xae271a947b5186fbULL },
            { L_,  609, 0x6f4035e675680638ULL, 0x042d2ebdcbd22d1fULL },
            { L_,  610, 0x9b09ff3624569ddbULL, 0xd5f3ed4785073399ULL },
            { L_,  611, 0xd3e0d3314461db67ULL, 0x7654cdacd8ef9599ULL },
            { L_,  612, 0xa142b43ccb98686aULL, 0x565ec31eb0f4bf5cULL },
            { L_,  613, 0x9080fc0758ac25b0ULL, 0xd59de3c9cfc063d3ULL },
            { L_,  614, 0xcfcaeb5f080386faULL, 0xaf4aef31194bc533ULL },
            { L_,  615, 0xdc557eec07f08246ULL, 0xa20d6cace80203d5ULL },
            { L_,  616, 0xf7bc6c869a90ca21ULL, 0xfb03928041729b8cULL },
            { L_,  617, 0x8ff57bc7fbf0c4f3ULL, 0x68ca475a5d7ac0d4ULL },
            { L_,  618, 0xfa595cd9351c642fULL, 0x2b686d67b76626e5ULL },
            { L_,  619, 0xe5a6d16634237a13ULL, 0x905c538bd32c8935ULL },
            { L_,  620, 0x7a51f5b769493121ULL, 0x577e2857e73aa3b3ULL },
            { L_,  621, 0x2ecbe98cabf4da24ULL, 0x182c2895e4fffebbULL },
            { L_,  622, 0x303fd6482d126acbULL, 0x7b265c397b421f8aULL },
            { L_,  623, 0x5fbd01c3b8afc523ULL, 0x7858d68403dbacd1ULL },
            { L_,  624, 0xfaf0480856ed9ecfULL, 0x965bcfb6cbae1a0fULL },
            { L_,  625, 0x2a956c4dc6facca8ULL, 0x712c6ee72a679e5aULL },
            { L_,  626, 0x17253ef7ce948915ULL, 0x4e58d1c4e580b138ULL },
            { L_,  627, 0x6621c3692c631e37ULL, 0xc529dc2a4e865606ULL },
            { L_,  628, 0x6904d42d36ef879aULL, 0x4fc3e7996fff2431ULL },
            { L_,  629, 0xc0d89e9b3d151effULL, 0xb3105071318d0f42ULL },
            { L_,  630, 0x51b2989ffb351104ULL, 0xc03702d816606d43ULL },
            { L_,  631, 0x5e828f213a3a42baULL, 0xa5367927b30d2451ULL },
            { L_,  632, 0x98cb8340d286e6f0ULL, 0x8ba8adaddf066db1ULL },
            { L_,  633, 0xb85cfec8f6f342f1ULL, 0x91333df99b2360c5ULL },
            { L_,  634, 0x2db67a5a44cdaa8eULL, 0xcd760c31ec9e445cULL },
            { L_,  635, 0xaee3ae887d96ba22ULL, 0xa525ab7e3fcd63d0ULL },
            { L_,  636, 0x9afec3e437c6fa91ULL, 0x2d06df294f755426ULL },
            { L_,  637, 0x06ad26190d590dcdULL, 0x4253ef6054568deeULL },
            { L_,  638, 0xb336a0309188437bULL, 0x687985917559b5a2ULL },
            { L_,  639, 0xd017faf89c2d3832ULL, 0x472132b43ca51d8aULL },
            { L_,  640, 0xea50a30e8d763e0eULL, 0xe3245c336132e33bULL },
            { L_,  641, 0xbfa099e4c92af779ULL, 0x079ad5679ec65eb3ULL },
            { L_,  642, 0x77c0511ab22913efULL, 0xec0c9f7f35d154bdULL },
            { L_,  643, 0xc83ee43af44eedc5ULL, 0x168c657296d357dfULL },
            { L_,  644, 0x2dd0c0b16c20d657ULL, 0x68b455d7fa609666ULL },
            { L_,  645, 0xb55677db8dee51e8ULL, 0x19d10dddc4ea19eeULL },
            { L_,  646, 0xb5df56d762987300ULL, 0x754c92602c33a44fULL },
            { L_,  647, 0x482be3545e0c00f5ULL, 0xa26180070a77478eULL },
            { L_,  648, 0xce2eb75a98140cacULL, 0x25ba3ad57bf04d4eULL },
            { L_,  649, 0x408cfa04643333b9ULL, 0x0e5b074d986e71ffULL },
            { L_,  650, 0x660103d8dfdb8f60ULL, 0x3169274b1b159bc0ULL },
            { L_,  651, 0xb74cf0c0ecede44fULL, 0xf609e3561dfc0b2fULL },
            { L_,  652, 0x399de555ea4e57dcULL, 0xd073f4a30d0ff0a3ULL },
            { L_,  653, 0x459614334c21fadaULL, 0xbc036fb63cc0080aULL },
            { L_,  654, 0x779a046cd0d9d514ULL, 0x86ab0b8dc97e17e0ULL },
            { L_,  655, 0xe30ba8c41a102c6bULL, 0x4b90964d60482066ULL },
            { L_,  656, 0x4ffb8f089c85faa0ULL, 0x40456c886ce4f4ddULL },
            { L_,  657, 0x03d4a936daa138e5ULL, 0x13f80b66fcdeeb6dULL },
            { L_,  658, 0xdf08ae3de2da8e62ULL, 0x1196f76b181388f9ULL },
            { L_,  659, 0xd476a5abd97216b4ULL, 0x508c312bef74c3e1ULL },
            { L_,  660, 0xf2d47c357b3be43bULL, 0x55e371430b0f38c2ULL },
            { L_,  661, 0x29b38465127a920aULL, 0xd170927eadea17fdULL },
            { L_,  662, 0x93013b4f5a23a81bULL, 0x76a1571cbd793138ULL },
            { L_,  663, 0xcd355d87938df077ULL, 0x0e24b0b546af3aa7ULL },
            { L_,  664, 0x02d78cb86bd61340ULL, 0x9704737e5e3f0ffeULL },
            { L_,  665, 0xcdec6aa154dc63adULL, 0xcf2c39245deaf1ceULL },
            { L_,  666, 0xb9471cb898f75addULL, 0x89e268eaba1a71f7ULL },
            { L_,  667, 0xd91f9f04e69678beULL, 0xb2bdea3398954d10ULL },
            { L_,  668, 0xc6fa31d75b4e6b71ULL, 0x123316f0569739daULL },
            { L_,  669, 0x85b4ffdd96742303ULL, 0xed52bd0450206b1fULL },
            { L_,  670, 0xd804b5cfb2607fbbULL, 0xf8b47f8039c8cba9ULL },
            { L_,  671, 0x79624a317debf165ULL, 0xf4428fc1226d3abaULL },
            { L_,  672, 0x2c9bd71e26dac2b0ULL, 0x2e9c06f0b4fe27c9ULL },
            { L_,  673, 0xe01413f9b1cd55f6ULL, 0x1ba9e1d73312798aULL },
            { L_,  674, 0x18de9d016b155c43ULL, 0xd407611dc5d87308ULL },
            { L_,  675, 0x645f7d97474006c6ULL, 0x377f8a370998bbdaULL },
            { L_,  676, 0x9e05f3e442b10d6bULL, 0xaf0acc457c49f387ULL },
            { L_,  677, 0xb1fb44a6c315a2c3ULL, 0x1f29a086b179761dULL },
            { L_,  678, 0x243af129eb2551e0ULL, 0x59b6060307887a9eULL },
            { L_,  679, 0x85de06753806a97eULL, 0xb01ee4041ae27137ULL },
            { L_,  680, 0xb69b9b804b281016ULL, 0xec6307576bdd7ae1ULL },
            { L_,  681, 0x675d6724d1b3b4fbULL, 0x14d18232b1701868ULL },
            { L_,  682, 0x0cbc400d5f66d1b1ULL, 0xd587bce9b8e9f5a0ULL },
            { L_,  683, 0x833651948e0ea74fULL, 0x73905e39b565984cULL },
            { L_,  684, 0x66a78b949294e239ULL, 0xd1919efffdad7980ULL },
            { L_,  685, 0xe06cdb625f980a24ULL, 0xba356429d284f56cULL },
            { L_,  686, 0x1ff966ad40fc1e56ULL, 0x6ea61aa60b334c66ULL },
            { L_,  687, 0xf12a897d3ee827eaULL, 0x8ca443c843e057c5ULL },
            { L_,  688, 0xa9ed75e45e70fec0ULL, 0x0557eb35db34a1ccULL },
            { L_,  689, 0xeb677bd3a8e8dc99ULL, 0xd5441d98afb8ed65ULL },
            { L_,  690, 0x8d92fd0c35685341ULL, 0xbbc9c04a1421c119ULL },
            { L_,  691, 0xd36459ed970f13c5ULL, 0xcfffeb1360105b21ULL },
            { L_,  692, 0x0aa668cfe897898fULL, 0x443968f081f2ce49ULL },
            { L_,  693, 0xab693c0de27eb552ULL, 0x4ede8ec12a93c868ULL },
            { L_,  694, 0x92c081c6255d3c8fULL, 0xbf72fe63fa9310c9ULL },
            { L_,  695, 0xd110daa25b1dc024ULL, 0x42ee06dd4fbc4249ULL },
            { L_,  696, 0xb284da061a92e763ULL, 0xc2d418fb569ab132ULL },
            { L_,  697, 0xeffd81ffa489b236ULL, 0x1f31c1173d1b69d7ULL },
            { L_,  698, 0xd61f5cacef231ce8ULL, 0x2ab259a75313f693ULL },
            { L_,  699, 0x81d7660ca5725719ULL, 0x9f4cccf043db0ae8ULL },
            { L_,  700, 0x4e62a036eb9cb795ULL, 0x341c73cac22f5e0bULL },
            { L_,  701, 0xfd44d23022aff808ULL, 0x100810bbf4f12140ULL },
            { L_,  702, 0x4aebd5a994ec81f9ULL, 0x7cfd98d242edd3a5ULL },
            { L_,  703, 0x632d4709cdb547ffULL, 0x53edc57edeccd74fULL },
            { L_,  704, 0x9f720a53715e0221ULL, 0x6e33db4f472e2e9cULL },
            { L_,  705, 0x91ac056eeaa6cc6fULL, 0x532f7c8cccff721eULL },
            { L_,  706, 0x9f9cbabeb2bbd603ULL, 0x178055213daa5349ULL },
            { L_,  707, 0xa920d4e1ac592538ULL, 0x445af050aeab1413ULL },
            { L_,  708, 0xff96f63c132d1981ULL, 0x2a8784327505cf22ULL },
            { L_,  709, 0x4c60a945a3927a18ULL, 0x8c7aa2298a42fbc2ULL },
            { L_,  710, 0x80fc7a4a9b308cdcULL, 0xbac7a9de41c5b190ULL },
            { L_,  711, 0x61422295dc5b8ee8ULL, 0x842331cdba4d8569ULL },
            { L_,  712, 0x069322d239a40558ULL, 0xd5036d9ff0f1c074ULL },
            { L_,  713, 0xafa02e1c4f83c210ULL, 0xc7ce796c8632ca68ULL },
            { L_,  714, 0x1cff577b19b91e00ULL, 0x8181c2b34e0f649bULL },
            { L_,  715, 0x1064247b55073480ULL, 0xf45af518799a7ac6ULL },
            { L_,  716, 0x1d8f007ffdbe61f7ULL, 0x9e316f7c6901abc3ULL },
            { L_,  717, 0xade73276b3ffb0b0ULL, 0x278e7e849963e83fULL },
            { L_,  718, 0xa254c91545f0cdc8ULL, 0x096611b19f11ff7aULL },
            { L_,  719, 0x332d58c1ce3292c3ULL, 0xe496e6857cbd2ec4ULL },
            { L_,  720, 0xec13f417c1dfa706ULL, 0x6b4334e5552b704eULL },
            { L_,  721, 0x923f073f1c18c806ULL, 0xfc3d76899d29b062ULL },
            { L_,  722, 0x5a126956fd685572ULL, 0x4ede32910bb62bfbULL },
            { L_,  723, 0xc4d9ffb5a6062a68ULL, 0xa9bfb3aa2b199d4bULL },
            { L_,  724, 0xca56de75d526c45bULL, 0x55148353e3f519f8ULL },
            { L_,  725, 0x855b285115423cc5ULL, 0x004906bce614b3afULL },
            { L_,  726, 0xb5330db354659eebULL, 0x2a3d461c6349009cULL },
            { L_,  727, 0x8e506f6c6bc46b69ULL, 0x831c6aa65f2ff59eULL },
            { L_,  728, 0xfc6150c9aa046b8dULL, 0xbda5b0188fc656dbULL },
            { L_,  729, 0xe067417eefe1e8bbULL, 0x9130dcdfb7d15961ULL },
            { L_,  730, 0x557c545345ad1b9eULL, 0x6b4da56f59a662ffULL },
            { L_,  731, 0xce6034cc911829ecULL, 0x93c57bf737ad7525ULL },
            { L_,  732, 0xffd6e7dc11311035ULL, 0x911f90bfdeb8dabdULL },
            { L_,  733, 0x28de10c8e401c86fULL, 0x5bde98868deacddbULL },
            { L_,  734, 0x17459475261f15d8ULL, 0xb00e194fd076c7d5ULL },
            { L_,  735, 0x2ac2e6498197dd97ULL, 0x75fb779c2dc11fbeULL },
            { L_,  736, 0x2584137323f2e58fULL, 0xcd8865f7b82d0098ULL },
            { L_,  737, 0xa58d92386630c4cbULL, 0x5eab034e0fc2090fULL },
            { L_,  738, 0x1b55fcdd7380f821ULL, 0xf90bbdc3c4fd73eaULL },
            { L_,  739, 0xccb01f796fbb9fb2ULL, 0xb2216f3c487ff6d3ULL },
            { L_,  740, 0x3d0269432d007cf3ULL, 0x262115411c6401feULL },
            { L_,  741, 0x988bbb323313a02dULL, 0x85c7f711ac894136ULL },
            { L_,  742, 0x7c7e02fc1a1f9334ULL, 0x99cd4d5fa985a430ULL },
            { L_,  743, 0xeab44cbc28bc439bULL, 0x2c92652c14aa5287ULL },
            { L_,  744, 0xcbf2fd6e3a2659c6ULL, 0x57edc0718c6107b1ULL },
            { L_,  745, 0x6de69bbe5fd3b436ULL, 0xb34d52204d2e6663ULL },
            { L_,  746, 0x20125e6e35355fc8ULL, 0x0e8a37b9f9fc5b1bULL },
            { L_,  747, 0x5a35773d0f0df305ULL, 0xb905ab4977073f86ULL },
            { L_,  748, 0x5097a4a064ea4308ULL, 0xdd0d879c79233552ULL },
            { L_,  749, 0xd28e520e54dcb162ULL, 0x463ebdcd912028f1ULL },
            { L_,  750, 0x975949d1c7082a3bULL, 0xf068f78888dbf791ULL },
            { L_,  751, 0x0648c26338c48972ULL, 0x56343eda37238e99ULL },
            { L_,  752, 0x6fd5618c2a629c27ULL, 0xa1f7097c8f22c9b1ULL },
            { L_,  753, 0xe893438554f21addULL, 0x382c6b68bb7476e9ULL },
            { L_,  754, 0xff4b654685633fbbULL, 0xa5fde9c1c0e53531ULL },
            { L_,  755, 0x1ff52249a793e035ULL, 0xde159d9493a3f9f2ULL },
            { L_,  756, 0xd136f7c3c16a5712ULL, 0x23875e914caa72c5ULL },
            { L_,  757, 0xfd7677359542a04bULL, 0x59eee394b04fcf85ULL },
            { L_,  758, 0x63c107b41bd7d996ULL, 0x73962f0fb5ef9450ULL },
            { L_,  759, 0xe9e852e16ad66fafULL, 0x4187e354465dc3eaULL },
            { L_,  760, 0x267dee6c64515cc6ULL, 0xbbf3daa332daf094ULL },
            { L_,  761, 0xfdebbe375baa3802ULL, 0x78c46dcb0de60f6bULL },
            { L_,  762, 0x7c8450ed2b460c5dULL, 0x98d580ddd7fbe050ULL },
            { L_,  763, 0xd5aec3ec0372f865ULL, 0x708c43ef15115cd4ULL },
            { L_,  764, 0x1d7fe63070657c4eULL, 0x5a9f14f9be221dc8ULL },
            { L_,  765, 0x0d69fe473f209c9aULL, 0x13ba3a155c07bbe7ULL },
            { L_,  766, 0x073ce2bf448e007aULL, 0x3202845a909dc4ccULL },
            { L_,  767, 0xcf91c881fe4129e0ULL, 0x0ccf5c6429ec6fa4ULL },
            { L_,  768, 0x8ec80ff8966eefb4ULL, 0xd7f4439fc2f7bc3aULL },
            { L_,  769, 0x1367df4a34f52712ULL, 0x1c5e94542d1b2e2cULL },
            { L_,  770, 0x1da05dcd249e3932ULL, 0x2b8faad30f7b042aULL },
            { L_,  771, 0xb436fe2fdc7e24beULL, 0xbf01b95164309fd9ULL },
            { L_,  772, 0x2a3dcc290106f654ULL, 0x6bf257651a85947dULL },
            { L_,  773, 0xf65d9250926829aeULL, 0x8999d9e5c07bd41dULL },
            { L_,  774, 0x90ae349a5cff4fd9ULL, 0x9f4a184dccdfb58eULL },
            { L_,  775, 0x9d858482f3189d06ULL, 0xc9960f4c6a97d198ULL },
            { L_,  776, 0xc3d56a271cd06b83ULL, 0x77a68df17c84689cULL },
            { L_,  777, 0x319716208e696e5cULL, 0xdc7890cb79926f2bULL },
            { L_,  778, 0xe574483e14ef4a7cULL, 0xc064228e68dde0d7ULL },
            { L_,  779, 0x474d85a26134dc64ULL, 0x3631a1d5cd01b180ULL },
            { L_,  780, 0x8e52f7599e98266fULL, 0xc58a9b1bb07af8f8ULL },
            { L_,  781, 0x2338b06519be7b31ULL, 0x6af1f0b7c6523184ULL },
            { L_,  782, 0x42ce129ddd6a3bdeULL, 0x7162a5bd6ebd0d6bULL },
            { L_,  783, 0xe04f282962529c7eULL, 0x2bd99f22ae4e4de7ULL },
            { L_,  784, 0x85aba9f357d775d0ULL, 0xc5c57335fb07a551ULL },
            { L_,  785, 0x85b804f09907971eULL, 0xbdf160c7a10a5fd2ULL },
            { L_,  786, 0x3d14dea3705f12a1ULL, 0x8d2634e27624fd63ULL },
            { L_,  787, 0xc0de6cbacb27aa23ULL, 0x4364319aba68c22aULL },
            { L_,  788, 0xb2888cb4cb1e7e52ULL, 0xf1154d4a37ca32d0ULL },
            { L_,  789, 0x7835ce1f33e94f50ULL, 0x34059a0a3b6cc8fbULL },
            { L_,  790, 0x1b20e40d885b2567ULL, 0xf5f96888962aecc6ULL },
            { L_,  791, 0x94df955ae1563002ULL, 0x872b7952616d2ddeULL },
            { L_,  792, 0x68eac08dd20252d0ULL, 0x9ef4acfcf4d1d308ULL },
            { L_,  793, 0x83f7afc0112141b8ULL, 0x52370a6c9e04575fULL },
            { L_,  794, 0x6e31111a31a8fb8dULL, 0xf0b70ef9b1bdd0a4ULL },
            { L_,  795, 0x47aca8f78c310d54ULL, 0x1ea2538f20e6b312ULL },
            { L_,  796, 0xf81b0df3cd12c846ULL, 0x6a666015430b44bfULL },
            { L_,  797, 0x6dea382cfd51dbd6ULL, 0x70a98f86833fc288ULL },
            { L_,  798, 0xa4cff6b8be39b619ULL, 0x9dbd4fe4d6e700e5ULL },
            { L_,  799, 0x75d42639b43b64ceULL, 0x1d5f3d9c36fdff77ULL },
            { L_,  800, 0xda0ee2689fc42442ULL, 0x578614781ba42a16ULL },
            { L_,  801, 0xb66056c8adcfe2adULL, 0xf744a932776e9554ULL },
            { L_,  802, 0xa8abc142fb02d49aULL, 0x517678f0260e5801ULL },
            { L_,  803, 0x87b9611d20bc1ba0ULL, 0x576975f2ef76d8e8ULL },
            { L_,  804, 0xc9c0299895320274ULL, 0xf4cb58c57de38686ULL },
            { L_,  805, 0x05361dc3633ec513ULL, 0x01bbd50f9253b1f0ULL },
            { L_,  806, 0xae31ddf5fb9d35d3ULL, 0xabaf5d8a4975c6a2ULL },
            { L_,  807, 0xc1bc6bbacf77ca9dULL, 0x34494c0db37346d6ULL },
            { L_,  808, 0x047e3989c5e50614ULL, 0xdff66453c01a7395ULL },
            { L_,  809, 0x2164a856084c3118ULL, 0xf721d345d0fcbde2ULL },
            { L_,  810, 0x3c22cbdce019104dULL, 0xfaed8e7bff2ccf5eULL },
            { L_,  811, 0x567be7cf8286e940ULL, 0x639815d4a740ad66ULL },
            { L_,  812, 0x906583b5351f1828ULL, 0x4d55c53377839ef6ULL },
            { L_,  813, 0x5109fd31e782a239ULL, 0xac882c55b4fd4c50ULL },
            { L_,  814, 0xf68d950b45f8c6b5ULL, 0xe18078bbf35ae039ULL },
            { L_,  815, 0xf82cb0b111d59b78ULL, 0x37709e3ac473e5d7ULL },
            { L_,  816, 0x5fefc1cf9e513c60ULL, 0x301f965f9150c809ULL },
            { L_,  817, 0x9cee38eebc4a71bcULL, 0x7e2628ec8239f9bfULL },
            { L_,  818, 0x6483cfb87655b62eULL, 0xfa24fc12124b12b5ULL },
            { L_,  819, 0x997728445d91a8e6ULL, 0x6fbfe94c617e603eULL },
            { L_,  820, 0xc7fc7eb0ef2ad7f3ULL, 0x5af35d25c056e26dULL },
            { L_,  821, 0x56259c0add03f392ULL, 0xb25f79fd71269030ULL },
            { L_,  822, 0xcf7afc4fa2738b08ULL, 0x2cb13aa639b4569aULL },
            { L_,  823, 0xfb4f1de72523a988ULL, 0xf27656e9c18fcce5ULL },
            { L_,  824, 0x4d14e2f2dd87315fULL, 0xf5dd1187de6c902bULL },
            { L_,  825, 0xc3d38900d04febb0ULL, 0xef36c651d5933b57ULL },
            { L_,  826, 0xdf5ab51fe63696c1ULL, 0x590563ef415491f0ULL },
            { L_,  827, 0xf060f239a49936baULL, 0xbf4b69a2bc57e634ULL },
            { L_,  828, 0x349f3fad18586c93ULL, 0xa77cf8e0404f8d42ULL },
            { L_,  829, 0x13fe9cc36057b10eULL, 0x1681b16d44a39439ULL },
            { L_,  830, 0x8b1b17e0356a610dULL, 0xc225d3fdc05dea8aULL },
            { L_,  831, 0x911978add84d6c5cULL, 0x56e77c132d87d03bULL },
            { L_,  832, 0x90fbf84fad220080ULL, 0xb8bcc0820b824fdcULL },
            { L_,  833, 0x84ea3996662fffb5ULL, 0xed016fb8d2e2e051ULL },
            { L_,  834, 0x8d64d334ddf5a80eULL, 0xd89d9b2e625d5bbcULL },
            { L_,  835, 0xf9f7aa1d3aa3d385ULL, 0xadbfef7d3e3f4dd9ULL },
            { L_,  836, 0xfe183193424ca2dfULL, 0x34949e968fe54976ULL },
            { L_,  837, 0x96ee5f1b2f1f0351ULL, 0x7c14c3ce2f5dcd70ULL },
            { L_,  838, 0xae0b85eec270fed9ULL, 0xb2d848b5b9add2d1ULL },
            { L_,  839, 0x24bdffcee8863b7cULL, 0xda12c15ac790f874ULL },
            { L_,  840, 0xc82228080f52da61ULL, 0x1aa4219376b0385cULL },
            { L_,  841, 0x4380c09c5a9dee2aULL, 0x34db3d53c4c9e703ULL },
            { L_,  842, 0x3d17fdf3012b3cfbULL, 0x730606a58eca494dULL },
            { L_,  843, 0xdd257e865c542bf7ULL, 0x020616d0df61148eULL },
            { L_,  844, 0xf3106b481f79123aULL, 0x5e06aff92e8cd921ULL },
            { L_,  845, 0xbb24063377510659ULL, 0x109957428b2964c9ULL },
            { L_,  846, 0xe954abafb097dec5ULL, 0x076c6f10ebacc936ULL },
            { L_,  847, 0x7de960ca5fbc7471ULL, 0x56da7384377556d6ULL },
            { L_,  848, 0xae0010ee58cc439eULL, 0x9bcf23dd6385e820ULL },
            { L_,  849, 0xdf8852824cb5aca0ULL, 0xd2d6758e17952124ULL },
            { L_,  850, 0xaf7c9be45f5b6ef2ULL, 0x3e7d554ede812623ULL },
            { L_,  851, 0x2e3e5dc3458d75a3ULL, 0xdffac2fb6085a3b3ULL },
            { L_,  852, 0xa46ff67f638c386bULL, 0x38c3f75d48f58794ULL },
            { L_,  853, 0xbdefb8accc0f0adfULL, 0x93e9dc9e264332e1ULL },
            { L_,  854, 0x16240fcc43720405ULL, 0xa7e674c4dffeb7c9ULL },
            { L_,  855, 0x8ba2ace9e42781a0ULL, 0x670b6b88790835ecULL },
            { L_,  856, 0x51830a4ec98bcf61ULL, 0x403f5c6a1960bc84ULL },
            { L_,  857, 0x1932487670731c7fULL, 0x6fe2191612302469ULL },
            { L_,  858, 0x7e027ce50bdf69a6ULL, 0xfb95a0a68088d51eULL },
            { L_,  859, 0x88eefb93b6ecad4aULL, 0x1f7de82a78d81110ULL },
            { L_,  860, 0xde2e345bf2c218daULL, 0xdb1bca1da6e7035fULL },
            { L_,  861, 0x899b3f8bc6a36e42ULL, 0x0e306f8d64aecc90ULL },
            { L_,  862, 0xc73492d3f47432fbULL, 0x5307cf2c65fc03bdULL },
            { L_,  863, 0xee5e58d8c34f293eULL, 0x4954ef355c7414b6ULL },
            { L_,  864, 0x1598c3d83fbcc38bULL, 0x607e7716d4960188ULL },
            { L_,  865, 0x60ff7b0bb205bb7cULL, 0x0f016ab77a6a3a7bULL },
            { L_,  866, 0xacac3b4618edc2e9ULL, 0xee6e10bcbead5d1dULL },
            { L_,  867, 0xf8c15e33209e8b9eULL, 0x802f09276c00010eULL },
            { L_,  868, 0xd9444e464f4e71fdULL, 0x43a186c16f03ec10ULL },
            { L_,  869, 0xc401a84c33aafc82ULL, 0xeb56be6068a930cfULL },
            { L_,  870, 0xe60f7c53a0a1f548ULL, 0x4e047a629e1e8754ULL },
            { L_,  871, 0xab5ea6fab106c2e7ULL, 0x736ff8d7421ff013ULL },
            { L_,  872, 0xc333cff05f970c81ULL, 0x65ffd61189b8b733ULL },
            { L_,  873, 0x5452c8e1011d6b1dULL, 0xf2d11ced7d8bf2bcULL },
            { L_,  874, 0xc8d2f16b46f0fd14ULL, 0x1b99dcba4a1d9a72ULL },
            { L_,  875, 0x05cbf792a796c27cULL, 0x9aa035f4eb609696ULL },
            { L_,  876, 0x5dcf3fe9d11f4617ULL, 0x7c5c5e85574a1bb9ULL },
            { L_,  877, 0x92cb3fc076135042ULL, 0x9cab0e9a74a80a6fULL },
            { L_,  878, 0xf8065886e4a5a2c3ULL, 0x81b746de7babfa2dULL },
            { L_,  879, 0x57c59324d58b7438ULL, 0x8d5eef8511d15179ULL },
            { L_,  880, 0xe6c7272eb0b73096ULL, 0x834f763b81fc38b5ULL },
            { L_,  881, 0x7e87d960dbd773fbULL, 0x48a92a459938c925ULL },
            { L_,  882, 0xb473479ab5208c11ULL, 0xcd628c6fa6ee7cb5ULL },
            { L_,  883, 0x4abcfd7d0c44a7f1ULL, 0x0b01d646c30be2fbULL },
            { L_,  884, 0x20e0eac1103ec2deULL, 0x9f8bbb58c38a66bdULL },
            { L_,  885, 0x0ebf7899388600e0ULL, 0x0aa2b2c2705cc82aULL },
            { L_,  886, 0xa28c9bcde0b67f54ULL, 0x3e1c2ad9c3da6f95ULL },
            { L_,  887, 0x0165362621941898ULL, 0x90544a546771545fULL },
            { L_,  888, 0x027c4a778d072066ULL, 0x0a42c2455d016605ULL },
            { L_,  889, 0x8197f13f05df15caULL, 0x2b3f00e0e1267994ULL },
            { L_,  890, 0x38b019d65c63c08fULL, 0x37c9e1b95c150631ULL },
            { L_,  891, 0x9afee25065393061ULL, 0xc264e504f6f06053ULL },
            { L_,  892, 0x215ad218d3166213ULL, 0x55b66a48a32d3ffaULL },
            { L_,  893, 0xab2eec86b21b65f6ULL, 0x1ea69c5aeeddb687ULL },
            { L_,  894, 0xd8bcd6783a1f9878ULL, 0x9ef7a0b3d1a85e8fULL },
            { L_,  895, 0xf80964a8756a2f39ULL, 0x1181c7bb8546ea47ULL },
            { L_,  896, 0x466e61cfe1a47e76ULL, 0xf2b07accea4e3d83ULL },
            { L_,  897, 0x57504ad200ebc344ULL, 0xdef18bc648daa7dbULL },
            { L_,  898, 0x39579e42217f1051ULL, 0x10d5c19d98503881ULL },
            { L_,  899, 0xc68468f020b2f6a1ULL, 0x686a323b72ddeeffULL },
            { L_,  900, 0x44c2189dc532a462ULL, 0xc504559e13d6dad2ULL },
            { L_,  901, 0xbc1b1bb39f897291ULL, 0xb86c6f1aa0b19884ULL },
            { L_,  902, 0xf4ef6d8345c23110ULL, 0xf591db9db6529de8ULL },
            { L_,  903, 0xbe65af4e7a082316ULL, 0xd9867fc176aaf54dULL },
            { L_,  904, 0xe532f5fe56d59717ULL, 0x90b22566e431d3b0ULL },
            { L_,  905, 0x141a9e1dd1fa6277ULL, 0xde897b6bce429d5fULL },
            { L_,  906, 0x95f13eedf0de7bdcULL, 0x4c5d78906bbc8a87ULL },
            { L_,  907, 0x3c10396cff3367abULL, 0x43265447f3a332c1ULL },
            { L_,  908, 0x615224f5d403219fULL, 0xb127451903d1f46eULL },
            { L_,  909, 0xf45c2bcd97ade105ULL, 0x0be8ce43c2ab2007ULL },
            { L_,  910, 0x68a5606de41a7ec9ULL, 0x2fc54ab45d621efbULL },
            { L_,  911, 0x7a67daea6cb77e84ULL, 0x6f8471e7d069d197ULL },
            { L_,  912, 0x6eb3a14e4206979cULL, 0x79c8b46d1d17dc0eULL },
            { L_,  913, 0x4c786cd5a9ac930bULL, 0x94758171e7976992ULL },
            { L_,  914, 0x3dc98a17c5ea55b8ULL, 0x1728eb9482f28b43ULL },
            { L_,  915, 0x179b4387f2d67adfULL, 0xcd1c8da5aac567c6ULL },
            { L_,  916, 0xf8452dbd9b410a79ULL, 0x6a24304943644032ULL },
            { L_,  917, 0x52c7cb925bb70723ULL, 0xd37199237d7f4470ULL },
            { L_,  918, 0xdf79b6482c60354eULL, 0xb11c9e4dd38317f6ULL },
            { L_,  919, 0xa47f3ddb2a7c663dULL, 0xbe52c760cdb518a0ULL },
            { L_,  920, 0xebb02cad779e76baULL, 0xa4d35d51c73b04a3ULL },
            { L_,  921, 0x040652c49e2d55ddULL, 0x86fef9eeda2591b2ULL },
            { L_,  922, 0x7dcdde8724941ef3ULL, 0x0e5f693f837fa5dfULL },
            { L_,  923, 0x235912a1eedc5c09ULL, 0xd475f9413678bb2dULL },
            { L_,  924, 0x05afbb61de9c15d7ULL, 0xfb2cc6d8fd971696ULL },
            { L_,  925, 0x97f3fb0f9f670f6eULL, 0x766b18ac74f46425ULL },
            { L_,  926, 0x50eb813c2f28b59aULL, 0xf9a513d6fd517fb4ULL },
            { L_,  927, 0xd29d0f650338090cULL, 0x89bfab17e1e4c420ULL },
            { L_,  928, 0xc65b5489bb1e3e8fULL, 0x42212bb67c0a3c9dULL },
            { L_,  929, 0xe1cc093b6dfafff0ULL, 0x72b144bf740f8672ULL },
            { L_,  930, 0x1f72b2c0106e33d1ULL, 0x5da7a8e973979facULL },
            { L_,  931, 0x79790590dfdca03bULL, 0x791a6716b0ab3227ULL },
            { L_,  932, 0x7e117284602b24b8ULL, 0xd60568fafe4ea86dULL },
            { L_,  933, 0x6f0cde503867c5c1ULL, 0x3cf5b29976c239a4ULL },
            { L_,  934, 0xb5c0e9ff3f4c10cdULL, 0x9f2fcc04de983442ULL },
            { L_,  935, 0x552c32c4edfeaba5ULL, 0x21dd98fd8031da7dULL },
            { L_,  936, 0xdf5abe932520f5dbULL, 0x9261d0fbc530473dULL },
            { L_,  937, 0xa342695991d75710ULL, 0xc278a95c9f9b0eb1ULL },
            { L_,  938, 0x55d87a383b2325b4ULL, 0x2c8c9bb7303ab06bULL },
            { L_,  939, 0xa531b3995b123073ULL, 0x1893050fecffdbb4ULL },
            { L_,  940, 0x90d5fcd2b1b97d67ULL, 0xf1cb0f2dbd8d5b7cULL },
            { L_,  941, 0xf64edda59a4a93f9ULL, 0xbccac6bad2427f10ULL },
            { L_,  942, 0x797bea8ae1fc7abfULL, 0x57634ac53b8fa62aULL },
            { L_,  943, 0xc8bcc6200ae235b1ULL, 0x64bba2dda2359ef8ULL },
            { L_,  944, 0x44bb523fd0c6c955ULL, 0xe3614f1d0ba235baULL },
            { L_,  945, 0x7f18ff62bdeeb66fULL, 0xa3720c8ddf8014c4ULL },
            { L_,  946, 0x12ae78e5edee2e39ULL, 0xacc1253c51c11394ULL },
            { L_,  947, 0x0a3680edd8d7e72aULL, 0x5fd94a7178e65361ULL },
            { L_,  948, 0x7bf24385b293eb04ULL, 0x93b1c9afb862e827ULL },
            { L_,  949, 0x3ab0b8edab9d26d8ULL, 0x4488389491442827ULL },
            { L_,  950, 0x23161de553ee1d11ULL, 0x2e1fd843613e1760ULL },
            { L_,  951, 0x321d739db71ec2fdULL, 0x9aaf223230547457ULL },
            { L_,  952, 0x9255123cdee4abecULL, 0x72a1f65b6e1ad86eULL },
            { L_,  953, 0x5e99816c200a8d00ULL, 0x4b0e43164297b7b9ULL },
            { L_,  954, 0xab4b4c1dc7b878ecULL, 0xff7f6ac0d3e62510ULL },
            { L_,  955, 0x5a81415efce14476ULL, 0x23aee55bbd2ad01dULL },
            { L_,  956, 0xee4c7f00f29118b9ULL, 0xd262f0be665a3268ULL },
            { L_,  957, 0x9028bfc4a4b9e8d5ULL, 0xbe215edcdaeaa0bfULL },
            { L_,  958, 0x8f26bc2419a3e13eULL, 0xf89cbbc2dbdac06fULL },
            { L_,  959, 0xd1cef48ba98e70f8ULL, 0x0acb5baed5c53af2ULL },
            { L_,  960, 0x07b48bbe6b7ce0f6ULL, 0x97a614dab0d5c9ebULL },
            { L_,  961, 0x3eb2406b95fd35aaULL, 0xe260447dae3aa0ddULL },
            { L_,  962, 0x435e54bbe21a4e53ULL, 0x9c79e19ccad0ee7eULL },
            { L_,  963, 0xe8267acfcfc61527ULL, 0x4e2268361cbe93a5ULL },
            { L_,  964, 0xbc84260d0de4a611ULL, 0x72e77bb3ada26e5aULL },
            { L_,  965, 0x61702a0838f2e627ULL, 0xf94985d053085773ULL },
            { L_,  966, 0x50657b7410f271b6ULL, 0x39561ed7051c4c0dULL },
            { L_,  967, 0x19e06a3b0852c744ULL, 0x19ff9523d286b74dULL },
            { L_,  968, 0x556e23c47f7d4ce1ULL, 0x2089542b98a45fe3ULL },
            { L_,  969, 0xa075be0483c324b3ULL, 0x58b68ebd87f40d8dULL },
            { L_,  970, 0xbea32691653f2457ULL, 0xbc19fdd2eb1b0db8ULL },
            { L_,  971, 0xda5c0fcfc5ad5e3aULL, 0xd4a2aa969283766aULL },
            { L_,  972, 0xfadd1a20078e5af6ULL, 0xf67ded391229460fULL },
            { L_,  973, 0xf917c364e8a6a8abULL, 0x2ea33eae1acc8d98ULL },
            { L_,  974, 0x1c7c2e2b1e377999ULL, 0x601bcc4742a60f08ULL },
            { L_,  975, 0xdc2db8444dd4ce28ULL, 0xd92ce5f37520babcULL },
            { L_,  976, 0x563134d519304867ULL, 0x457275ad26a9fd27ULL },
            { L_,  977, 0xedc4074c43e5b944ULL, 0xe9eb3ee78a2d906bULL },
            { L_,  978, 0x07536aa6a0dcb8b4ULL, 0x68c2250d2c7b4f46ULL },
            { L_,  979, 0xd13e327e866200b2ULL, 0x184396ad0c456aafULL },
            { L_,  980, 0x7d7104be1b4aeebcULL, 0x226633b270e30221ULL },
            { L_,  981, 0xae19fa2d071ed185ULL, 0x95b2b591ee519191ULL },
            { L_,  982, 0x3c2f98d54ad3cd7dULL, 0xe05d71c6cdbe8d0bULL },
            { L_,  983, 0x5ba8fec26c8a2d6dULL, 0x236e3ec09e6d0307ULL },
            { L_,  984, 0xf623d380ddf39031ULL, 0x3dc296d22ba9a6e1ULL },
            { L_,  985, 0xef2ced792371f3cfULL, 0xadda01068d8a1a60ULL },
            { L_,  986, 0x92f813c27c6c6599ULL, 0x1b0698f173431c86ULL },
            { L_,  987, 0x42893b181fce63fdULL, 0xe3f9abafac6d446dULL },
            { L_,  988, 0xf50d3a367b4907bcULL, 0xb1bdb6359cbeb83fULL },
            { L_,  989, 0x8a7fd3e00dfc3862ULL, 0xba4494b1d18a9e7bULL },
            { L_,  990, 0xf5659cd6de04defbULL, 0xbc8ad6733d936b30ULL },
            { L_,  991, 0x23900e0616336f2eULL, 0x92d5a1f749c38e00ULL },
            { L_,  992, 0x852114696fa85c91ULL, 0x166b9dabb5b2199aULL },
            { L_,  993, 0xdb304577293782e1ULL, 0xf78140d416d6f0bdULL },
            { L_,  994, 0x3831b9e40ba690b5ULL, 0x83a8629045ac64daULL },
            { L_,  995, 0xd12d4d87ed12d38eULL, 0x0dcf248b98ebe5ceULL },
            { L_,  996, 0x361094cf082708daULL, 0x19ed591e3b5dbe66ULL },
            { L_,  997, 0xb121bf2f03cab7beULL, 0xcd4afdede84ec1acULL },
            { L_,  998, 0xe8087b179cf24cb9ULL, 0x3b5a5a95a268e5b6ULL },
            { L_,  999, 0x81cfa403f05cbe49ULL, 0x2e39cc4d5a42b107ULL },
            { L_, 1000, 0xbb74f35fef67db59ULL, 0x8d212926093a5d58ULL },
            { L_, 1001, 0x8f4dd6298ba3bb60ULL, 0x1fa2a44d630633b9ULL },
            { L_, 1002, 0x58cc671e9ab6c7f8ULL, 0xe0b50056dad2cae0ULL },
            { L_, 1003, 0x195242c648ddd17eULL, 0xecb63e508ddb4aacULL },
            { L_, 1004, 0x4492a793818ab867ULL, 0x4e1a18f519855a02ULL },
            { L_, 1005, 0x43991f229b347e5dULL, 0x4cd373188fd0b1c2ULL },
            { L_, 1006, 0xeb2e09b76713cd94ULL, 0x8ce9bb1ce85ddb8aULL },
            { L_, 1007, 0x26b1be0853f155f4ULL, 0x425c78e547a377a8ULL },
            { L_, 1008, 0xbab26dee3ceb599cULL, 0x00b029a4de50b57cULL },
            { L_, 1009, 0x188c11bd1c8afc41ULL, 0xca9ed3d068fa5072ULL },
            { L_, 1010, 0xd586b7ebc870b2c2ULL, 0x916ff6707929a10fULL },
            { L_, 1011, 0xbfcc45aa5eb23e06ULL, 0x7b54b2e65e58447aULL },
            { L_, 1012, 0x9acd101bd09411c7ULL, 0x6162020163e2d0cbULL },
            { L_, 1013, 0xa2fdba5ca5804263ULL, 0x007f37adf3b6c474ULL },
            { L_, 1014, 0x0e3436fdbc807704ULL, 0x20b03bfc4fd6468dULL },
            { L_, 1015, 0xa3f913d37085bbb0ULL, 0x269fcdcbfd4c48bbULL },
            { L_, 1016, 0x42ed3afc08773dabULL, 0x9a2e978a9391c958ULL },
            { L_, 1017, 0x51bfa9ccde2c3e51ULL, 0x2381a5c304b31570ULL },
            { L_, 1018, 0x6601fcce2bba7d27ULL, 0x3fd011c8cf437ecbULL },
            { L_, 1019, 0x7e8ff559f6a83036ULL, 0xcb9e7d36cabaf8b4ULL },
            { L_, 1020, 0x469332f4c5fff559ULL, 0xecd9c36025e083d5ULL },
            { L_, 1021, 0x1058875bc754f004ULL, 0xd6fb7d300d75b5aeULL },
            { L_, 1022, 0xc13f57e638a69404ULL, 0x88a5a3eb31619fafULL },
            { L_, 1023, 0x0bb79516d8301c99ULL, 0x0743aaf121b87e4bULL },
#endif
        };
        enum { k_DATA_LEN = sizeof DATA / sizeof *DATA };

        int repeats = 1;
        if (verbose) {
            repeats = atoi(argv[2]);
            repeats = std::max(repeats, 1);
        }

        int iterations = k_DATA_LEN * repeats;
        for (int ti = 0; ti < iterations; ++ti) {
            const Data&    data          = DATA[ti % k_DATA_LEN];
            const int      LINE          = data.d_line;
            const unsigned LEN           = data.d_len;
            const Uint64   HASH          = data.d_hash;
            const Uint64   SEEDLESS_HASH = data.d_seedlessHash;

            char buffer[k_DATA_LEN + 16];
            ASSERT(LEN <= sizeof(buffer));

            u::RandGen rand;
            rand.num(LEN);
            rand.randMemory(buffer, LEN);
            Uint64 seed;
            rand.randVal(&seed);

            if (veryVerbose) {
                P_(LEN);    P_(buffer[0]);    P_(buffer[LEN - 1]);    P(seed);
            }

            Obj hash(reinterpret_cast<const char *>(&seed));
            hash(buffer, LEN);
            const Uint64 hashVal = hash.computeHash();

            Obj hash2(seed);
            hash2(buffer, LEN);
            const Uint64 hash2Val = hash2.computeHash();

            Obj seedlessHash;
            seedlessHash(buffer, LEN);
            const Uint64 seedlessHashVal = seedlessHash.computeHash();

            OldObj oldHash(seed);
            oldHash(buffer, LEN);
            const Uint64 oldVal = oldHash.computeHash();

#undef  U_PRINT_CASE_8
#define U_PRINT_CASE_8 0

#if U_PRINT_CASE_8
            printf("%12s{ L_, %4u, 0x%016llxULL, 0x%016llxULL },\n",
                                            "", LEN, hashVal, seedlessHashVal);
#else
            ASSERTV(LINE, LEN, HASH, hashVal,  HASH == hashVal);
            ASSERTV(LINE, LEN, HASH, hash2Val, HASH == hash2Val);
            ASSERTV(LINE, LEN, HASH, oldVal,   HASH == oldVal);
            ASSERTV(LINE, LEN, SEEDLESS_HASH, seedlessHashVal,
                                             SEEDLESS_HASH == seedlessHashVal);
#endif
        }

#if !U_PRINT_CASE_8
        if (verbose) printf("SEPARABLE HASH TEST WITH ALIGN SHIFT\n"
                            "====================================\n");

        iterations *= 10;
        for (int ti = 0; ti < iterations; ++ti) {
            const Data&  data          = DATA[ti % k_DATA_LEN];
            const int    LINE          = data.d_line;
            const size_t LEN           = data.d_len;
            const Uint64 HASH          = data.d_hash;
            const Uint64 SEEDLESS_HASH = data.d_seedlessHash;

            u::RandGen rand;
            rand.num(LEN);

            u::RandGen rand2;
            rand2.num(ti);

            // start `buffer` at a random offset from `rawBuffer` to test that
            // the code is never depending on the input's alignment.

            char *buffer;
            {
                static char rawBuffer[k_DATA_LEN + 8];

                buffer = rawBuffer + (rand2.num() & 7);
                ASSERT(buffer + LEN <= rawBuffer + sizeof(rawBuffer));
            }

            rand.randMemory(buffer, LEN);
            Uint64 seed;
            rand.randVal(&seed);

            if (veryVerbose) {
                P_(LEN);    P_(buffer[0]);    P(seed);
            }

            Obj hash(reinterpret_cast<const char *>(&seed));
            Obj hash2(seed);
            Obj seedlessHash;

            for (size_t offset = 0, subLen; offset < LEN; offset += subLen) {
                subLen = 1 + rand2.num() % (LEN - offset);
                ASSERT(offset + subLen <= LEN);

                hash(        buffer + offset, subLen);
                hash2(       buffer + offset, subLen);
                seedlessHash(buffer + offset, subLen);
            }
            if (0 == LEN && (ti / k_DATA_LEN) % 2) {
                hash(        buffer, 0);
                hash2(       buffer, 0);
                seedlessHash(buffer, 0);
            }

            Uint64 hashVal         = hash.computeHash();
            Uint64 hash2Val        = hash2.computeHash();
            Uint64 seedlessHashVal = seedlessHash.computeHash();

            ASSERTV(LINE, LEN, HASH, hashVal, HASH == hashVal);
            ASSERTV(LINE, LEN, HASH, hashVal, HASH == hash2Val);
            ASSERTV(LINE, LEN, SEEDLESS_HASH, seedlessHashVal,
                                             SEEDLESS_HASH == seedlessHashVal);
        }
#endif
      } break;
      case 7: {
        // --------------------------------------------------------------------
        // ALIGNMENT INDEPENDENCE TEST
        //
        // Concern:
        // 1. That the hash value is independent of the alignment of input.
        //
        // Plan:
        // 1. Populate a buffer with random data, hash it, then mememove the
        //    data to different locations and observe that the hash value
        //    doesn't change.
        //
        // Testing:
        //   ALIGNMENT INDEPENDENCE
        // --------------------------------------------------------------------

        if (verbose) printf("ALIGNMENT INDEPENDENCE TEST\n"
                            "===========================\n");

        enum { k_MAX_DATA_LEN = 64,
               k_MAX_SHIFT = 7 };
        char buffer[k_MAX_DATA_LEN + k_MAX_SHIFT];

        for (int ii = 1 << 20; 0 < ii--; ) {
            const size_t len = u::mmixRandNum() % (k_MAX_DATA_LEN + 1);
            u::mmixRandMemory(buffer, len);

            const Uint64 seed = u::mmixRandNum() |
                                 (static_cast<Uint64>(u::mmixRandNum()) << 32);

            Obj hash(seed);
            hash(buffer, len);
            const Uint64 hashVal = hash.computeHash();

            for (int jj = 1; jj <= k_MAX_SHIFT; ++jj) {
                ::memmove(buffer + jj, buffer + jj - 1, len);

                Obj hashB(seed);
                hashB(buffer + jj, len);
                ASSERT(hashB.computeHash() == hashVal);
            }
        }
      } break;
      case 6: {
        // --------------------------------------------------------------------
        // MATCH TEST
        //
        // Concerns:
        // 1. That the component under test produces EXACTLY the same results
        //    as the original code from
        //    https://github.com/wangyi-fudan/wyhash/blob/master/wyhash.h
        //
        // Plan:
        // 1. Create a random number generator.
        //
        // 2. Populate a buffer with random data.
        //
        // 3. Have a minimally-modified copy of the code from the website in
        //    test driver, and hash with both that and the hash function
        //    provided by this component, and compare the results.
        //
        // 4. Hash on varying subranges of the buffer.
        //
        // Testing:
        //   MATCH TEST
        // --------------------------------------------------------------------

        if (verbose) printf("MATCH TEST\n"
                            "==========\n");

        namespace TC = MatchTest;

        enum { k_MAX_LEN = 1024 };

        char buffer[k_MAX_LEN];    const char *constBuffer = buffer;
        Uint64 seed;

        static const Uint64 data[] = { 0, 1, 2, 3, 4, 8, 16, 127, 128, 255,
           0x7fffffffffffffffULL, 0x8000000000000000ULL, 0xffffffffffffffffULL,
           0x1234567812345678ULL, 0x8765432187654321ULL, 0xf0f0f0f0f0f0f0f0ULL,
           0x8080808080808080ULL, 0xaaaaaaaaaaaaaaaaULL, 0xa0a0a0a0a0a0a0a0ULL,
           0x123456789abcdef0ULL, 0x0fedcba987654321ULL, 0x1122334455667788ULL,
           0x9900aabbccddeeffULL
        };
        enum { k_DATA_LEN   = sizeof data / sizeof *data };

        if (verbose) {
            printf("Table-driven test: k_DATA_LEN: %d\n", k_DATA_LEN);
        }

        static int misses[k_MAX_LEN + 1], hits[k_MAX_LEN + 1];
        bool matchFail = false;
        for (int ti = 0; ti < k_DATA_LEN; ++ti) {
            const char *pBeginRaw = reinterpret_cast<const char *>(&data[ti]);
            const char *pEndRaw   = pBeginRaw + sizeof(Uint64);
            for (const char *pBegin = pBeginRaw; pBegin < pEndRaw; ++pBegin) {
                for (const char *pEnd = pBegin; pEnd <= pEndRaw; ++pEnd) {
                    const size_t numBytes = pEnd - pBegin;

                    if (0 == numBytes && (pBeginRaw < pBegin || 0 != ti)) {
                        continue;
                    }

                    for (int tj = 0; tj < k_DATA_LEN; ++tj) {
                        const Uint64 seed   = data[tj];

                        TC::Alg oldH(seed);
                        oldH(pBegin, numBytes);
                        Uint64 oldHash = oldH.computeHash();

                        Obj hash(seed);
                        hash(pBegin, numBytes);
                        Uint64 newHash = hash.computeHash();

                        bool fail;
                        ASSERTV(oldHash, newHash, seed, numBytes,
                                  numBytes % 32, !(fail = oldHash != newHash));

                        hits  [numBytes] += !fail;
                        misses[numBytes] += fail;
                        matchFail   |= fail;
                    }
                }
            }
        }

        if (veryVerbose || matchFail) {
            printf("Results of table-driven test:\n");
            for (unsigned ii = 0; ii <= sizeof(Uint64); ++ii) {
                printf("%smod: %2d, misses: %5d, hits: %5d\n",
                            0 == ii % 4 ? "\n" : "", ii, misses[ii], hits[ii]);
            }
        }

        if (verbose) printf("Random-Driven Test\n");

        memset(misses, 0, sizeof(misses));
        memset(hits,   0, sizeof(hits));
        matchFail = false;
        for (int ii = 0; ii < (1 << 10); ++ii) {
            u::mmixRandVal(&seed);
            u::mmixRandMemory(&buffer, sizeof(buffer));

            for (unsigned dataLen = 0; dataLen <= k_MAX_LEN; ++dataLen) {
                TC::Alg oldH(seed);
                oldH(constBuffer, dataLen);
                const Uint64 oldHash = oldH.computeHash();

                Obj hash(seed);
                hash(constBuffer, dataLen);
                const Uint64 newHash = hash.computeHash();

                if ((veryVerbose && ii < 10) || veryVeryVerbose) {
                    printf("%d seed: 0x%016llx size: %u"
                                          "\nold: 0x%016llx\nnew: 0x%016llx\n",
                                          ii, seed, dataLen, oldHash, newHash);
                }

                bool fail;
                ASSERTV(ii, oldHash, newHash, seed, dataLen, dataLen % 32,
                                                 !(fail = oldHash != newHash));

                hits  [dataLen] += !fail;
                misses[dataLen] += fail;
                matchFail       |= fail;
            }
        }

        if (veryVerbose || matchFail) {
            printf("Results of random test:\n");
            for (int ii = 0; ii <= k_MAX_LEN; ++ii) {
                printf("%smod: %2d, misses: %5d, hits: %5d\n",
                            0 == ii % 4 ? "\n" : "", ii, misses[ii], hits[ii]);
            }
        }
      } break;
      case 5: {
        // --------------------------------------------------------------------
        // TESTING BDE TYPE TRAITS
        //   The class is bitwise movable and should have a trait that
        //   indicates that.
        //
        // Concerns:
        // 1. The class is marked as `IsBitwiseMoveable`.
        //
        // Plan:
        // 1. ASSERT the presence of the trait using the `bslalg::HasTrait`
        //    metafunction. (C-1)
        //
        // Testing:
        //   Trait IsBitwiseMoveable
        // --------------------------------------------------------------------

        if (verbose) printf("TESTING BDE TYPE TRAITS\n"
                            "=======================\n");

        if (verbose) printf("ASSERT the presence of the trait using the"
                            " `bslalg::HasTrait` metafunction. (C-1)\n");
        {
            ASSERT(bslmf::IsBitwiseMoveable<Obj>::value);
        }

      } break;
      case 4: {
        // --------------------------------------------------------------------
        // TESTING `result_type` TYPEDEF
        //   Verify that the class offers the result_type typedef that needs to
        //   be exposed by all `bslh` hashing algorithms
        //
        // Concerns:
        // 1. The typedef `result_type` is publicly accessible and an alias for
        //    `bsls::Types::Uint64`.
        //
        // 2. `computeHash()` returns `result_type`
        //
        // 2. `operator()(const void *, size_t)` returns `void`
        //
        // Plan:
        // 1. ASSERT the typedef is accessible and is the correct type using
        //    `bslmf::IsSame`. (C-1)
        //
        // 2. Declare the expected signature of `computeHash()` and then assign
        //    to it.  If it compiles, the test passes. (C-2)
        //
        // 3. Declare the expected signature of `operator()` and then assign to
        //    it.  If it compiles, the test passes.  (C-3)
        //
        // Testing:
        //   typedef bsls::Types::Uint64 result_type;
        // --------------------------------------------------------------------

        if (verbose) printf("TESTING `result_type` TYPEDEF\n"
                            "=============================\n");

        if (verbose) printf("ASSERT the typedef is accessible and is the"
                            " correct type using `bslmf::IsSame`. (C-1)\n");
        {
            ASSERT((bslmf::IsSame<bsls::Types::Uint64,
                                  Obj::result_type>::value));
        }
        if (verbose) printf("Declare the expected signature of `computeHash()`"
                            " and then assign to it.  If it compiles, the test"
                            " passes. (C-2)\n");
        {
            Obj::result_type (Obj::*expectedSignature) ();

            expectedSignature = &Obj::computeHash;
            (void)expectedSignature;
        }

        if (verbose) printf("Declare the expected signature of `operator()`"
                            " and then assign to it.  If it compiles, the test"
                            " passes. (C-3)\n");
        {
            void (Obj::*expectedSignature)(const void *, size_t);

            expectedSignature = &Obj::operator();
            (void)expectedSignature;
        }
      } break;
      case 3: {
        // --------------------------------------------------------------------
        // TESTING TESTING `operator()` AND `computeHash()`
        //   Verify the class provides an overload for the function call
        //   operator that can be called with some bytes and a length.  Verify
        //   that calling `operator()` will permute the algorithm's internal
        //   state as specified by WyHash.  Verify that `computeHash()`
        //   returns the final value specified by the canonical WyHash
        //   implementation.
        //
        // Concerns:
        // 1. The function call operator is callable.
        //
        // 2. Given the same bytes, the function call operator will permute the
        //    internal state of the algorithm in the same way, regardless of
        //    whether the bytes are passed in all at once or in pieces.
        //
        // 3. Byte sequences passed in to `operator()` with a length of 0 will
        //    not contribute to the final hash
        //
        // 4. `computeHash()` and returns the appropriate value according to
        //    the WyHash specification.
        //
        // 5. `operator()` does a BSLS_ASSERT for null pointers and non-zero
        //    length, and not for null pointers and zero length.
        //
        // Plan:
        // 1. Insert various lengths of c-strings into the algorithm both all
        //    at once and char by char using `operator()`.  Assert that the
        //    algorithm produces the same result in both cases. (C-1,2)
        //
        // 2. Hash c-strings all at once and with multiple calls to
        //    `operator()` with length 0.  Assert that both methods of hashing
        //    c-strings produce the same values.(C-3)
        //
        // 3. Check the output of `computeHash()` against the expected results
        //    from a known good version of the algorithm. (C-4)
        //
        // 4. Call `operator()` with a null pointer. (C-5)
        //
        // Testing:
        //   void operator()(void const* key, size_t len);
        //   result_type computeHash();
        // --------------------------------------------------------------------

        if (verbose) printf("NEGATIVE TESTING\n"
                            "================\n");

        if (verbose) printf("Call `operator()` with null pointers. (C-5)\n");
        {
            const char data[5] = {'a', 'b', 'c', 'd', 'e'};

            bsls::AssertTestHandlerGuard guard;

            ASSERT_SAFE_FAIL(Obj().operator()(   0, 1));
            ASSERT_SAFE_FAIL(Obj().operator()(   0, 5));
            ASSERT_PASS(Obj().operator()(        0, 0));
            ASSERT_PASS(Obj().operator()(     data, 5));

            Obj a;
            ASSERT_PASS(a(   0, 0));
            ASSERT_PASS(a.computeHash());
            Obj b;
            ASSERT_PASS(b(data, 5));
            ASSERT_PASS(b.computeHash());
        }
      } break;
      case 2: {
        // --------------------------------------------------------------------
        // TESTING CREATORS
        //   Ensure that the implicit destructor as well as the explicit
        //   default and parameterized constructors are publicly callable.
        //   Verify that the algorithm can be instantiated with or without a
        //   seed.  Note that a null pointer is not tested here, because there
        //   is no way to perform a BSLS_ASSERT before dereferenceing the
        //   pointer (without a performance penalty).
        //
        // Concerns:
        // 1. Objects can be created using the default constructor.
        //
        // 2. Objects can be created using either of the parameterized
        //    constructors.
        //
        // 3. Objects can be destroyed.
        //
        // Plan:
        // 1. Create a default constructed `Obj` and allow it
        //    to leave scope to be destroyed. (C-1,3)
        //
        // 2. Call the parameterized constructor with a seed. (C-2)
        //
        // Testing:
        //   Obj();
        //   Obj(const char *seed);
        //   Obj(Uint64 seed);
        //   ~Obj();
        // --------------------------------------------------------------------

        if (verbose)
            printf("TESTING CREATORS\n"
                   "================\n");

        if (verbose) printf("Create a default constructed"
                            " `Obj` and allow it to leave"
                            " scope to be destroyed. (C-1,3)\n");
        {
            Obj alg1;
        }

        if (verbose) printf("Call the parameterized constructor with a seed."
                            " (C-2)\n");
        {
            Uint64 seed = 5;
            Obj alg1(reinterpret_cast<const char *>(&seed));
            Obj alg2(seed);
        }

      } break;
      case 1: {
        // --------------------------------------------------------------------
        // BREATHING TEST
        //   This case exercises (but does not fully test) basic functionality.
        //
        // Concerns:
        // 1. The class is sufficiently functional to enable comprehensive
        //    testing in subsequent test cases.
        //
        // Plan:
        // 1. Create an instance of `bsl::Obj`. (C-1)
        //
        // 2. Verify different hashes are produced for different c-strings.
        //    (C-1)
        //
        // 3. Verify the same hashes are produced for the same c-strings. (C-1)
        //
        // 4. Verify different hashes are produced for different `int`s. (C-1)
        //
        // 5. Verify the same hashes are produced for the same `int`s. (C-1)
        //
        // Testing:
        //   BREATHING TEST
        // --------------------------------------------------------------------

        if (verbose) printf("BREATHING TEST\n"
                            "==============\n");

        if (verbose) printf("Instantiate `bsl::Obj`\n");
        {
            Obj hashAlg;
        }

        if (verbose) printf("Verify different hashes are produced for"
                            " different c-strings.\n");
        {
            Obj hashAlg1;
            Obj hashAlg2;
            const char * str1 = "Hello World";
            const char * str2 = "Goodbye World";
            hashAlg1(str1, strlen(str1));
            hashAlg2(str2, strlen(str2));
            ASSERT(hashAlg1.computeHash() != hashAlg2.computeHash());
        }

        if (verbose) printf("Verify the same hashes are produced for the same"
                            " c-strings.\n");
        {
            Obj hashAlg1;
            Obj hashAlg2;
            const char * str1 = "Hello World";
            const char * str2 = "Hello World";
            hashAlg1(str1, strlen(str1));
            hashAlg2(str2, strlen(str2));
            ASSERT(hashAlg1.computeHash() == hashAlg2.computeHash());
        }

        if (verbose) printf("Verify different hashes are produced for"
                            " different `int`s.\n");
        {
            Obj hashAlg1;
            Obj hashAlg2;
            int int1 = 123456;
            int int2 = 654321;
            hashAlg1(&int1, sizeof(int));
            hashAlg2(&int2, sizeof(int));
            ASSERT(hashAlg1.computeHash() != hashAlg2.computeHash());
        }

        if (verbose) printf("Verify the same hashes are produced for the same"
                            " `int`s.\n");
        {
            Obj hashAlg1;
            Obj hashAlg2;
            int int1 = 123456;
            int int2 = 123456;
            hashAlg1(&int1, sizeof(int));
            hashAlg2(&int2, sizeof(int));
            ASSERT(hashAlg1.computeHash() == hashAlg2.computeHash());
        }

        if (verbose) printf("Observe hash of 0 bytes\n");
        {
            // In earlier implementations, this code resulted in a null ptr
            // being passed to a `memcpy` of 0 length, which offended the
            // undefined behavior sanitizer (`ubsan`).

            Obj hashAlg;
            hashAlg(0, 0);
            (void) hashAlg.computeHash();
        }
      } break;
      case -1: {
        // --------------------------------------------------------------------
        // DISPERSION TEST
        //
        // Concern:
        // 1. Measure how much difference a change of 1 bit to the input makes
        //    to the result.
        //
        // Plan:
        // 1. Try the hash function with a variety of inputs, then perturb the
        //    inputs by toggling one bit and see how much it changes the
        //    result.
        //
        // Testing:
        //   DISPERSION TEST
        // --------------------------------------------------------------------

        if (verbose) printf("DISPERSION TEST\n"
                            "===============\n");

        Uint64 seed, data;
        static int seedDiffBits[64], dataDiffBits[64];

        bsls::Stopwatch sw;
        sw.start(true);

        for (int ti = 0; ti < 100 * 1000; ++ti) {
            u::mmixRandVal(&seed);
            u::mmixRandVal(&data);

            Uint64 result[3];
            {
                Obj hasher(seed);
                hasher(&data, sizeof(data));
                result[0] = hasher.computeHash();
            }

            for (int ii = 0; ii < 64; ++ii) {
                const Uint64 otherSeed = seed ^ (1ULL << ii);

                Obj hasher(otherSeed);
                hasher(&data, sizeof(data));
                result[1] = hasher.computeHash();
                ++seedDiffBits[numBitsSet(result[1] ^ result[0])];
            }

            for (int ii = 0; ii < 64; ++ii) {
                const Uint64 otherData = data ^ (1ULL << ii);

                Obj hasher(seed);
                hasher(&otherData, sizeof(otherData));
                result[2] = hasher.computeHash();
                ++dataDiffBits[numBitsSet(result[2] ^ result[0])];
            }
        }

        sw.stop();

        printf("Seed diff bits:\n");
        for (int ii = 0; ii < 64; ++ii) {
            printf("%2d: diff: %5d\n%s", ii, seedDiffBits[ii],
                                                      3 == ii % 4 ? "\n" : "");
        }

        printf("Data diff bits:\n");
        for (int ii = 0; ii < 64; ++ii) {
            printf("%2d: diff: %5d\n%s", ii, dataDiffBits[ii],
                                                      3 == ii % 4 ? "\n" : "");
        }

        double system, user, wall;
        sw.accumulatedTimes(&system, &user, &wall);
        printf("Times: wall: %g, system: %g, user: %g\n", wall, system, user);
      } break;
      default: {
        fprintf(stderr, "WARNING: CASE `%d' NOT FOUND.\n", test);
        testStatus = -1;
      }
    }

    if (testStatus > 0) {
        fprintf(stderr, "Error, non-zero test status = %d.\n", testStatus);
    }

    return testStatus;
}

// ----------------------------------------------------------------------------
// Copyright 2022 Bloomberg Finance L.P.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ----------------------------- END-OF-FILE ----------------------------------
